2013-03-20 91 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