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

时间:2017-05-05 08:01:40

标签: java json jackson deserialization

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

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。相反,我希望杰克逊抛出异常,正确的JSON中缺少必需字段之一。我该如何存档?

非常感谢,伙计们!

1 个答案:

答案 0 :(得分:3)

由于您正在使用构造函数,因此可以启用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);