【问题标题】:Jackson is dropping type bindings when mapping an abstract type to a concrete type在将抽象类型映射到具体类型时,Jackson 正在删除类型绑定
【发布时间】:2016-10-23 05:42:55
【问题描述】:

我的问题就像“Jackson and generic type reference”,但是我的泛型类是抽象的,所以我必须将它映射到具体类型。这曾经在 Jackson v2.5.3 下运行良好,但最近在 Jackson(v2.7.2 或更早版本)中的更改已经破坏了它。

我有抽象类 Page 和具体类 PageImpl。我以前可以将Page反序列化为PageImpl,没问题:

SimpleModule module = new SimpleModule().addAbstractTypeMapping(Page.class, PageImpl.class)
ObjectMapper objectMapper = new ObjectMapper().registerModule(module);

但是现在,我通过调试源代码了解到,当 Jackson 将抽象类型映射到具体类型时,它会丢弃类型绑定。这意味着如果我告诉杰克逊将给定的 JSON 字符串转换为 Page...

类型
value = objectMapper.readValue(json,
    typeFactory.constructSimpleType(Page.class,
        new JavaType[]{typeFactory.constructSimpleType(XYZ.class, null)}));

...它会将输出类型映射到 PageImpl,但它会在将 JSON 反序列化为 PageImpl 之前删除类型绑定。这会导致 PageImpl POJO 包含 LinkedHashMap 对象列表,而不是 XYZ 对象列表。

我不知道杰克逊为什么会变成这样;这似乎是一个错误。寻找解决方法的建议。谢谢!

【问题讨论】:

    标签: java json generics jackson abstract


    【解决方案1】:

    尝试 2.7.5:由于类型解析重写导致了一些问题,虽然大多数已在 2.7.3 中修复,但在 2.7.4 中还有一个问题。所以很可能你确实遇到了一个错误。

    一般来说,试用您拥有的次要版本的最新补丁版本是个好主意:此时没有充分的理由使用 2.7.2,超过 2.7.5。

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 2021-08-04
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多