簡體   English   中英

如何使用Spring Boot RestTemplate解組JSON列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM