我使用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 == 1
和mean == 0.0
。相反,我希望杰克逊抛出异常,正确的JSON中缺少必需字段之一。我该如何存档?
非常感谢,伙计们!
答案 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);