放心 - 将响应 JSON 反序列化为 List<POJO>

2022-09-01 08:43:27

我有一个POJO。我正在从HTTP响应正文中的RESTful Web服务中以JSON格式检索其中一个对象。我正在尝试编写一个基于 Rest Assured 的测试,以分析返回的列表。代码如下所示:ArtworkList

Response response = get("/artwork");
List returnedArtworks = response.getBody().as(List.class)

问题是,我无法放心地将返回的JSON解析为.相反,我得到一个.该地图具有适当的结构,即杰克逊可以将它映射到对象,但我想避免手动映射它。List<Artwork>List<LinkedHashMap>Artwork

我的模型中的 JSON 映射是可以的,因为当我像这样映射单个对象时:

Artwork returnedArtwork = response.getBody().as(Artwork.class);

它工作正常。

有没有可能得到作为 ?returnedArtworksList<Artwork>


答案 1

您可以执行以下操作:

List<Artwork> returnedArtworks = Arrays.asList(response.getBody().as(Artwork[].class));

诀窍是将 JSON 反序列化为对象数组(因为数组或列表的 JSON 字符串之间没有区别),然后将数组转换为列表。


答案 2

此解决方案适用于版本 3.0.2(io.restassure):

  JsonPath jsonPath = RestAssured.given()
     .when()
     .get("/order")
     .then()
     .assertThat()
     .statusCode(Response.Status.OK.getStatusCode())
     .assertThat()
     .extract().body().jsonPath();

  List<Order> orders = jsonPath.getList("", Order.class);

这将提取结构的对象,如下所示:

public class Order {

private String id;

public String getId(){
return id; }

public void setId(String id){
this.id = id;
}


}

使用给定的 json:

[ 
{ "id" : "5" }, 
{ "id" : "6" }
]