【问题标题】:Will an error be produced if JSON response does not match with Java class?如果 JSON 响应与 Java 类不匹配会产生错误吗?
【发布时间】:2020-10-13 03:21:03
【问题描述】:

假设我有以下 Java 类

public class ResponseObj
{
  private String a;
  private String b;

  //constructors, getters, and setters
}

接下来我对 API 进行 REST 调用

ResponseEntity<ResponseObj> response = restTemplate.exchange("http://api.com/employee/24",
                  HttpMethod.GET, httpEntity, ResponseObj.class);

API 的 JSON 响应如下

{
  "a" : "data1",
  "c" : "data2",
  "d" : { "prop" : "data3"},
  "e" : ["data4","data5"]
}

由于 JSON 响应结构与 ResponseObj 不同,代码会产生错误吗?还是可以,但ResponseObj 不会有来自 JSON 响应的“c”、“d”和“e”属性,而ResponseObj 中的属性“b”的值为 null?

【问题讨论】:

  • 你自己用示例代码试过了吗?
  • 无法启动我的应用程序进行测试。仍在试图找出构建有什么问题。所以我在这里发布这个问题。
  • 为结果映射制作DTO和相关构造函数。
  • 您可以忽略未知属性作为响应 - 检查stackoverflow.com/a/5455563/1776132

标签: java json spring spring-boot spring-mvc


【解决方案1】:

这取决于某些情况。您要映射的字段必须具有相同的名称(或者您可以提供替代名称,例如 @JsonAlias)并在 json 中键入。 您可以创建ObjectMapper 并设置所需的行为。如果您将FAIL_ON_UNKNOWN_PROPERTIES 设置为false,那么它将忽略json 中的属性,这些属性不会映射到您的数据类中。 FAIL_ON_MISSING_CREATOR_PROPERTIES可以控制缺失字段的行为,例如b。 有很多属性和注解可以控制序列化/反序列化的行为。

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多