【发布时间】:2016-06-11 17:56:39
【问题描述】:
我正在寻找防止 Jackson 解析“错误”格式的数据的方法。例如,如果我们不想允许 null 作为文本值,则以下内容将继续进行:
jsonNode.textValue() // this will always return a String
如果我们必须阻止 null 值被解析,我们将不得不执行以下操作:
if (jsonNode.isNull())
throw Exception();
return jsonNode.textValue();
同样,如果我们尝试解析一个整数,它几乎会尝试任何东西。如果无法解析,asInt() 和 intValue() 都将返回 0:
如果表示不能转换为int(包括结构化 Objects 和 Arrays 等类型),将返回默认值 0; 不会抛出异常。
好吧,如果我想处理这些未知的、非法的、错误的、不可能的或任何你想称之为的转换怎么办?发生这种情况时似乎没有任何转换方法会为您抛出异常,似乎它们都无论如何都会执行转换。
对于最后一个例子,当然,我可以像第一个例子那样做:
if (!jsonNode.isInt())
throw new Exception();
但是每次解析一个值时都必须这样做是很烦人的。我希望某些方法会抛出异常。
我遗漏了 Jackson 的一些明显特征,或者根本没有像我描述的那样的方法?
【问题讨论】:
-
非常好的问题。我想知道为什么 Jackson 的默认方法是不惜一切代价尝试转换类型,而不是一开始就期望正确的类型并将不匹配视为逻辑错误。
-
是的......或者至少他们应该有方法来强制转换为预期的类型,然后是一组不同的安全方法。