我正在将“根” JsonNode的子节点转换为POJO。如果POJO在JSON中不存在,则会抛出MismatchedInputException
。
JsonNode pojoJson = rootJson.path("pojoName");
Pojo[] pojoArray = mapper.treeToValue(pojoJson, Pojo[].class);
我想知道是否有更优雅的方式来处理此异常,而不是每次要将JsonNode转换为POJO时都必须与has()
进行检查?
答案 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*)
之类的方法。但是您有几种选择。
空ObjectNode
和ArrayNode
将与那里的方法一起返回。将返回空数组,并且不会引发任何MismatchedInputException
。
但是:
with*
方法不仅返回*Node
。如果不存在任何属性,则会创建新节点并将其添加到您的rootJson
。withArray
。2)使用isMissingNode检测丢失的节点。
如果没有属性, path
方法将返回特殊的MissingNode。