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

新手上路,请多包涵

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

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

问题是,我无法让 Rest Assured 将返回的 JSON 解析为 List<Artwork> 。相反,我得到了 List<LinkedHashMap> 。该地图具有适当的结构,即可以由 Jackson 映射到 Artwork 对象,但我想避免手动映射它。

我的模型中的 JSON 映射没问题,因为当我像这样映射单个对象时:

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

它工作正常。

是否有可能得到 returnedArtworks 作为 List<Artwork>

原文由 Wojtek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 514
2 个回答

你可以这样做:

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

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

原文由 volatilevar 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

   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" }
]

原文由 Seren 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题