【问题标题】:jackson databinding version 2.9.5 unable to parse the object to JSON String杰克逊数据绑定版本 2.9.5 无法将对象解析为 JSON 字符串
【发布时间】:2020-04-15 06:33:59
【问题描述】:

我们已将 Jaxkson-databinding、jackson-core 和 jackson-annotation api 的版本从 2.8.2 升级到 2.9.5。 升级后,如果我正在使用,我的对象将变为空白 json 字符串(对于 2.8.2,相同的代码工作正常)

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibilityChecker(
        mapper.getVisibilityChecker().
        with(JsonAutoDetect.Visibility.NONE));

但如果我将代码更改为 2.9.5 版,同样可以正常工作

        mapper.setVisibilityChecker(mapper.getSerializationConfig()
        .getDefaultVisibilityChecker()
        .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
        .withGetterVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
        .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
        .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE));

我在API的变更集中找不到与此相关的版本升级变化

【问题讨论】:

    标签: java json jackson jackson-databind


    【解决方案1】:

    似乎在您的代码的第一部分中,您在使用 JsonAutoDetect.Visibility.NONE 时禁用了 POJO 上字段的可见性

    在第二部分你enabled visibility for public getters of your POJOs

    【讨论】:

    • 是的,但如果我在 2.8.2 中使用它,它工作正常
    • 在 v.2.8.x 中有一个问题reported in Jackson Github with non-working NONE option。所以实际上你得到的是错误修复的结果。
    • 我在 2.9.5 中遇到了一个新问题与 2.8.2 com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (通过引用链: com.czen.core.pagination.ScrollableList["data"]->java.util.ArrayList[0 ]->com.czen.core.value.ContentCommentValue["serviceId"])
    • 它似乎与 Jackson 库的版本无关。您应该使用@JsonInclude(Include.NON_NULL) 注释标记这些字段。
    • 我将它添加到 getter 方法中,但这不起作用。
    【解决方案2】:

    版本 2.9 中存在问题,已在 2.9.5 中解决。在此处显示:https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.9.5https://github.com/FasterXML/jackson-databind/issues/1947

    也许您应该尝试使用 2.9.4。如果您的代码在 2.9.4 上运行。它可能会受到变化的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多