REST Assured - Generic List 反序列化

假设我有一个Java类:Person

class Person {
    String name;
    String email;
}

使用 REST Assured,您可以反序列化此 JSON 对象

{"name":"Bob", "email":"bob@email.com"} 

到 Java 实例使用Person

Person bob = given().when().get("person/Bob/").as(Person.class);

如何使用 REST Assured 来反序列化此 JSON 数组

[{"name":"Bob", "email":"bob@email.com"}, 
 {"name":"Alice", "email":"alice@email.com"}, 
 {"name":"Jay", "email":"jay@email.com"}]

进入 ?例如,这将很方便:List<Person>

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

答案 1

我找到了一种方法来实现我想要的目标:

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

更新:使用 Rest-Assured 1.8.1,看起来不再支持 cast to List。您需要像这样声明和对象数组:

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

答案 2

要从 JSON API 响应中提取 Java 列表而不是数组,您只需要记住使用而不是:jsonPathas

List<Person> persons = given()
        .when()
        .get("/person")
        .then()
        .extract()
        .body()
        // here's the magic
        .jsonPath().getList(".", Person.class);

您的 json 路径可以指向您希望在正文中具有 json 对象列表的任何位置。在这个例子中(并解决你的问题),它只是指向json根。

sidenode:rest-assured 在内部使用 jackson 进行反序列化(对于以及.jsonPath.as)