java - JSON -> 不可变的自定义 Java 对象。 JSON 中的数据不足

标签 java json jackson deserialization

我使用 Jackson 将 JSON 反序列化为不可变的自定义 Java 对象。这是类(class):

final class DataPoint {
  private final int count;
  private final double mean;

  @JsonCreator
  DataPoint(
      @JsonProperty("count") int count,
      @JsonProperty("mean") double mean) {
    if (count <= 0) {
      throw new IllegalArgumentException("...");
    }
    this.count = count;
    this.mean = mean;
  }

  // getters...
}

这是我反序列化的 JSON:

{
  "count": 1,
  "mean": 2
}

它工作正常。现在我打破 JSON,即删除一个属性:

{
  "count": 1
}

反序列化代码为:

String json = "..."; // the second JSON
ObjectMapper mapper = new ObjectMapper();
DataPoint data  = mapper.readValue(json, DataPoint.class);

现在我得到 count == 1mean == 0.0。相反,我希望 Jackson 抛出异常,因为 JSON 中缺少必填字段之一。我该如何存档?

非常感谢你们,伙计们!

最佳答案

由于您使用的是构造函数,因此可以启用 DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES在缺少属性时抛出异常:

String json = "..."; // the second JSON
ObjectMapper mapper = new ObjectMapper()
        .enable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES);
DataPoint data  = mapper.readValue(json, DataPoint.class);

关于java - JSON -> 不可变的自定义 Java 对象。 JSON 中的数据不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799593/

相关文章:

java - 如何从 LinkedHashMap 迭代器获取键值对?

java - 显示通话中的拨号盘 - 通话时调用号码 - DTMF

json - REST 请求作为 url 编码或 JSON

android - 传递 Volley 图像作为下一个 Activity 背景图像

java - Jackson Parser 无法读取字符串中的反斜杠引号

java - spring cache redis : LazyInitializationException failed to lazily initialize a collection, 无法初始化代理 - 无 session

java.lang.ClassNotFoundException : org. springframework.http.converter.json.MappingJackson2HttpMessageConverter

java - 找到从 A 到 Z 的所有路径的有效算法?

java - 检查是否存在 .txt 文件。 FileWriter.exists 方法不起作用

javascript - JSON 中所需的帮助