2013-03-20 96 views
29

比方說,我有一個Java Person類:放心 - 泛型列表反序列化

class Person { 
    String name; 
    String email; 
} 

有了放心,你可以反序列化這個JSON對象

{"name":"Bob", "email":"[email protected]"} 

使用

一個Java Person實例
Person bob = given().when().get("person/Bob/").as(Person.class); 

如何使用REST確保反序列化此JSON陣列y

[{"name":"Bob", "email":"[email protected]"}, 
{"name":"Alice", "email":"[email protected]"}, 
{"name":"Jay", "email":"[email protected]"}] 

變成List<Person>?例如,這將方便:

List<Person> persons = given().when().get("person/").as(...); 
+4

+1很好地格式化和好問的問題。 – Johan 2013-03-20 18:27:22

回答

39

我找到了一種方法來達到我想要的東西:

List<Person> persons = given().when().get("person/").as(Person[].class); 

UPDATE:使用REST保證的1.8.1,貌似投給列表是不再支持。需要聲明和對象數組是這樣的:

Person[] persons = given().when().get("person/").as(Person[].class); 
+0

對我不起作用,使用java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.introspect.AnnotatedMethod.getParameterType(I)。這個東西有任何先決條件嗎? – Sarief 2016-07-29 14:12:08

+1

它對我來說非常合適。我正在使用https://mvnrepository.com/artifact/io.rest-assured/rest-assured/3.0.1 – Ramu 2016-11-24 06:35:39

+0

我的版本是2.4.1。所以這可能是原因。 – Sarief 2016-12-13 11:34:57

6

你也可以這樣做,如果你有興趣使用「預期()」

expect(). 
body("get(0).firstName", equalTo("Mike")). 
when(). 
get("person/"); 

這是我的情況

+0

謝謝。 「get(0)」是我所需要的。 – asmaier 2015-05-21 14:10:39

6

那些誰發現接受的答案不再工作。

List<Entity> list = new ArrayList<>(); 
    list = given() 
      .contentType(CONTENT_TYPE) 
     .when() 
      .get(getRestOperationPath()) 
     .then() 
      .extract().body().as(list.getClass()); 

希望你明白getRestOperationPath正在返回休息操作路徑;和CONTENT_TYPE是佔位符爲您的內容類型(應用例如/ JSON)

UPD:檢查不同的版本,行爲根據版本不同,所以你可能想嘗試不同的方法

+2

這應該是正確的答案。清潔,簡單,最新的迴應。 – 2016-09-27 20:19:08