【发布时间】: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