【问题标题】:Deserializing JSON response to Java using RestTemplate and Jackson使用 RestTemplate 和 Jackson 反序列化对 Java 的 JSON 响应
【发布时间】:2018-09-19 08:37:57
【问题描述】:

我在使用 Jackson 的 Spring Boot 1.5 应用程序中将 JSON 反序列化为 Java 对象时遇到了一些麻烦。

如下所示,JSON 响应是一个由单个 JSON 对象和一些嵌套属性组成的数组:

[
  {
    "deploymentProject": {
        "id": 57966596,
        "name": "MyApp 6.3"
    },
    "environmentStatuses": [{
            "environment": {
                "id": 57245736,
                "name": "Dev1",
                "deploymentProjectId": 57966596
            },
            "deploymentResult": {
                "deploymentVersionName": "App-51",
                "id": 59769040
            }
        },
        {
            "environment": {
                "id": 57245737,
                "name": "Dev2",
                "deploymentProjectId": 57966596
            },
            "deploymentResult": {
                "deploymentVersionName": "App-51",
                "id": 59769041
            }
        }
    ]
  }
]

ResultData.java

我不关心deploymentProject 属性,所以我只在ResultData 中包含environmentStatuses

@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultData {   
  private EnvironmentStatus[] environmentStatuses;

  // Getters and setters omitted
}

EnvironmentStatus.java

@JsonIgnoreProperties(ignoreUnknown = true)
public class EnvironmentStatus {

    private Environment environment;
    private DeploymentResult deployment;

    // Getters and setters omitted
}

Environment.java

@JsonIgnoreProperties(ignoreUnknown = true)
public class Environment {
    private long id;
    private String name;
    private String deploymentProjectId;
    //Getters and setters omitted
}

DeploymentResult.java

@JsonIgnoreProperties(ignoreUnknown = true)
public class DeploymentResult {
    private long id;
    private String deploymentVersionName;
    // Getters and setters omitted
}

当我在服务类中调用 RestTemplate 时,environmentStatuses 数组为 null

Service.java

ResponseEntity<List<ResultData>> response = restTemplate.exchange(uriBuilder.toUriString(),
                HttpMethod.GET, null, new ParameterizedTypeReference<List<ResultData>>() {});

return response.getBody();

【问题讨论】:

  • 如果你使用List&lt;EnvironmentStatus&gt;而不是数组会发生什么?
  • @mavriksc 修复了环境属性谢谢。部署信息仍然为空。

标签: java json spring-boot jackson resttemplate


【解决方案1】:

private DeploymentResult deployment; 是下一个问题.. 如果您希望在代码中使用此名称,则需要使用 json 结构名称进行注释。或者如果不命名为deploymentResult

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 2021-06-22
    • 2013-01-18
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多