【问题标题】:Passing MIssingNode to ObjectMapper to convert to POJO将 MIssingNode 传递给 ObjectMapper 以转换为 POJO
【发布时间】:2018-09-21 03:58:43
【问题描述】:

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

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

我想知道除了每次我想将 JsonNode 转换为 POJO 时必须检查 has() 之外,是否还有更优雅的方法来处理此异常?

【问题讨论】:

    标签: java jackson pojo jackson-databind


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      嗯,没有办法做到“清楚”。 Jackson 没有像 rootJson.path("pojoName", *defaultValue*)mapper.treeToValue(pojoJson, Pojo[].class, *defaultValue*) 这样的方法。但是您有多种选择。

      1) 使用withwithArray 而不是path

      空的ObjectNodeArrayNode 将通过那里的方法返回。将返回空数组并且不会抛出 MismatchedInputException

      但是:

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

      2) 使用isMissingNode 检测缺失节点。

      path 方法在不存在属性时返回特殊的MissingNode

      【讨论】:

        猜你喜欢
        • 2018-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 2021-12-04
        • 1970-01-01
        相关资源
        最近更新 更多