[英]How to unmarshall json lists using Spring Boot RestTemplate
我必須在JSON中解析REST響應,並且它具有許多對象的嵌套列表。
響應包含一個名為“ ObjectList”的項目,該項目具有一個列表和內部兩個元素,即“ ObjectA”和“ ObjectB”。 我不知道如何使用Jackson注釋來解析對對象的響應。
json看起來像這樣:
"ObjectList": [
{
"ObjectA": {
"property1": false,
"property2": true
},
"ObjectB": {
"property1": 66,
"property2": true
},
{
"ObjectA": {
"property1": false,
"property2": true
},
"ObjectB": {
"property1": 66,
"property2": true
}
}
]
}
我的代碼看起來像這樣
ResponseEntity<Response> response = restTemplate.exchange(URL, HttpMethod.GET, request, Response.class);
Response response = response.getBody();
響應是:
@JsonIgnoreProperties(ignoreUnknown = true)
public class TimesheetListResponse {
@JsonProperty("ObjectA")
private List<ObjectA> objectAList;
@JsonProperty("ObjectB")
private List<ObjectB> objectBList;
那根本行不通,我對如何映射它感到困惑。
根據您的要求,模型結構可能如下所示。 在Response對象的objectList映射中,您需要添加HashMap,其鍵為“ ObjectA” /“ ObjectB”字符串,值作為ObjectA / ObjectB的實例。 我已經將Map的值類型視為Object,因此任何對象類型A / B都可以放入其中。 添加相應的@JsonXXX批注。
public class Response {
private List<Map<String,Object>> objectList;
//Getters & Setters
}
public class ObjectB {
String propB1;
String propB2;
}
public class ObjectA {
String propA;
String propA1;
}
我還將列表中的條目視為可以是ObjectA或ObjectB的另一個包裝對象。 即
@JsonIgnoreProperties(ignoreUnknown = true)
public final class Parent {
@JsonProperty("ObjectList")
private List<ChildWrapper> objectList = new ArrayList<>();
}
@JsonIgnoreProperties(ignoreUnknown = true)
public final class ChildWrapper {
@JsonProperty("ObjectA")
private Child ObjectA;
@JsonProperty("ObjectB")
private Child ObjectB;
}
@JsonIgnoreProperties(ignoreUnknown = true)
public final class Child {
@JsonProperty("property1")
private int property1;
@JsonProperty("property2")
private boolean property2;
}
似乎映射很好,我只需要初始化Arraylist。 主要問題是由於我忘記了一個參數,端點返回了空值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.