有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Spring Boot RestTemplate解组json列表

我必须用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;

这根本不起作用,我对如何绘制这张地图感到困惑


共 (3) 个答案

  1. # 1 楼答案

    看起来映射很好,我只需要初始化Arraylist。主要问题是,由于我忘记了一个参数,端点返回空

  2. # 2 楼答案

    根据您的要求,模型结构可能如下所示。在响应对象中的objectList映射中,需要添加HashMap,其中键为“ObjectA”/“ObjectB”字符串,值为ObjectA/ObjectB实例。我把地图的值类型作为对象,这样任何对象类型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;
    
    }
    
  3. # 3 楼答案

    我也会考虑列表中的条目作为另一个包装对象,可以是对象A或对象B。即

    @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;
    }