我正在寻找阻止杰克逊以“错误”格式解析数据的方法。例如,如果我们不希望允许null
作为文本值,则以下内容将继续使用它:
jsonNode.textValue() // this will always return a String
如果我们必须阻止null
值被解析,我们必须执行以下操作:
if (jsonNode.isNull())
throw Exception();
return jsonNode.textValue();
同样,如果我们尝试解析整数,它几乎可以尝试任何东西。如果无法进行解析,asInt()和intValue()都将返回0:
如果无法将表示转换为int(包括结构化的 对象和数组之类的类型,将返回默认值0; 没有例外被抛出。
那么,如果我想对待这些未知的,非法的,错误的,不可能的或任何你想要调用它们的转换怎么办?似乎没有任何转换方法会在发生这种情况时为您抛出异常,无论如何它们似乎都会执行转换。
对于最后一个例子,当然,我可以做一些像第一个例子:
if (!jsonNode.isInt())
throw new Exception();
但是每次解析一个值时都必须这样做是一件烦恼。我希望有一些方法可以抛出异常。
我缺少杰克逊的一些明显特征,或者只是没有像我描述的那样的方法?
答案 0 :(得分:0)
我认为最简单的方法是自己解析int
:
int intValue = Integer.parseInt(jsonNode.textValue());
如果号码无效,这将抛出NumberFormatException
。
答案 1 :(得分:0)
没有。至少在JsonNode
可用时不会。如果杰克逊遇到无法解析的内容,ObjectMapper
会抛出JsonParseException
或JsonMappingException
。 null
是有效的JSON数据类型,因此遇到空值并非意外。检查null是用户的工作 - 验证。
所以你可以:
isInt
/ isNull
方法