使用 RestTemplate 和 Jackson 反序列化 JSON 对 Java 的响应

Deserializing JSON response to Java using RestTemplate and Jackson

我 运行 在使用 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
}

当我在我的服务 class 中调用 RestTemplate 时,environmentStatuses 数组是 null:

Service.java

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

return response.getBody();

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