解析杰克逊:在格式意外时抛出异常

时间:2016-06-11 17:56:40

标签: java json jackson

我正在寻找阻止杰克逊以“错误”格式解析数据的方法。例如,如果我们不希望允许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();

但是每次解析一个值时都必须这样做是一件烦恼。我希望有一些方法可以抛出异常。

我缺少杰克逊的一些明显特征,或者只是没有像我描述的那样的方法?

2 个答案:

答案 0 :(得分:0)

我认为最简单的方法是自己解析int

int intValue = Integer.parseInt(jsonNode.textValue());

如果号码无效,这将抛出NumberFormatException

答案 1 :(得分:0)

没有。至少在JsonNode可用时不会。如果杰克逊遇到无法解析的内容,ObjectMapper会抛出JsonParseExceptionJsonMappingExceptionnull是有效的JSON数据类型,因此遇到空值并非意外。检查null是用户的工作 - 验证。

所以你可以:

  • 使用您的isInt / isNull方法
  • 实施您自己的JsonParser
  • 或调查JsonSchema(这可能是矫枉过正)