【发布时间】:2017-05-05 08:01:39
【问题描述】:
我使用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 中缺少一个必填字段。我该如何存档?
非常感谢你们!
【问题讨论】:
-
如果换成
@JsonProperty("mean") Double mean看看是否为空怎么办? -
@StanislavL:嗯,这是一种解决方案。比你好多了!我说得对吗,杰克逊没有办法让我在没有拳击的情况下得到我想要的东西?
-
@StanislavL 您将无法判断它是丢失还是存在但设置为 null。
-
@shmosel 无论如何它都会失败。无法将 null 转换为 double,但您的答案是 +1 更好。我建议了一个解决方法。
-
@StanislavL 只要定义了属性,从 null 到 0 的隐式转换是可以接受的。无论哪种情况,您的解决方案都会引发异常。当然,只有 OP 才能说这是否有问题。
标签: java json jackson deserialization