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

标签 java json spring-boot jackson resttemplate

我在使用 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();

最佳答案

私有(private) DeploymentResult 部署; 是下一期.. 如果您希望在代码中使用此名称,则需要使用 json 结构名称进行注释。或者如果没有命名为deploymentResult

关于java - 使用 RestTemplate 和 Jackson 反序列化对 Java 的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49741543/

相关文章:

java - Spring、Interceptor的extractPathPatterns功能无法正常工作

java - 我无法在 Java 程序(swing)中的面板/ Canvas /窗口上绘制图形。有任何想法吗?

java - 如何解决 Jenkins 中 Spring Boot 项目自定义创建的依赖关系?

java - Spring Boot组件在单元测试中运行时面临空指针

java - 我的 Spring 应用程序无法识别我的网络服务

javascript - Spring PostMapping 接收具有空值的对象

java - Spring MVC 和带注释的 Controller 问题 :

java - 在 REST 服务中使用 ContainerResponse 过滤器时,GET 有效,但 POST 无效?

java - GSON从json文件到对象

ios - Swift 无法从 JSON api 读取普通话?