将MIssingNode传递给ObjectMapper以转换为POJO

时间:2018-09-21 03:58:43

标签: java jackson pojo jackson-databind

我正在将“根” JsonNode的子节点转换为POJO。如果POJO在JSON中不存在,则会抛出MismatchedInputException

  JsonNode pojoJson = rootJson.path("pojoName");
  Pojo[] pojoArray = mapper.treeToValue(pojoJson, Pojo[].class);

我想知道是否有更优雅的方式来处理此异常,而不是每次要将JsonNode转换为POJO时都必须与has()进行检查?

2 个答案:

答案 0 :(得分:0)

您可以预先检查节点类型:if (pojoJson != null && pojoJson.getNodeType() == JsonNodeType.ARRAY)或更简单的if (pojoJson != null && pojoJson.isArray())

答案 1 :(得分:0)

嗯,没有办法做到“清除”。杰克逊没有rootJson.path("pojoName", *defaultValue*)mapper.treeToValue(pojoJson, Pojo[].class, *defaultValue*)之类的方法。但是您有几种选择。

1)使用withwithArray代替path

ObjectNodeArrayNode将与那里的方法一起返回。将返回空数组,并且不会引发任何MismatchedInputException

但是:

  • with*方法不仅返回*Node。如果不存在任何属性,则会创建新节点并将其添加到您的rootJson
  • 如果要将ObjectNode转换为数组,请使用withArray

2)使用isMissingNode检测丢失的节点。

如果没有属性,

path方法将返回特殊的MissingNode