我的问题与“Jackson and generic type reference”类似,但添加了我的泛型类是抽象的皱纹,所以必须将其映射到具体类型。这在Jackson v2.5.3下运行良好,但Jackson(v2.7.2或更早版本)中的最近更改已将其打破。杰克逊将抽象类型映射到具体类型时将类型绑定丢弃
我有抽象类Page和具体类PageImpl。我曾经是能够反序列化页面的PageImpl,没问题:
SimpleModule module = new SimpleModule().addAbstractTypeMapping(Page.class, PageImpl.class)
ObjectMapper objectMapper = new ObjectMapper().registerModule(module);
,但现在,我已经通过调试源,当杰克逊抽象类型映射到具体类型,它丢弃的类型绑定教训。这意味着,如果我告诉杰克逊DESER一个给定的JSON字符串类型页< XYZ> ...
value = objectMapper.readValue(json,
typeFactory.constructSimpleType(Page.class,
new JavaType[]{typeFactory.constructSimpleType(XYZ.class, null)}));
...它会映射输出类型PageImpl,但在此之前则丢弃该类型绑定将JSON反序列化为PageImpl。这会导致PageImpl POJO包含LinkedHashMap对象列表,而不是XYZ对象列表。
我不确定为什么杰克逊是这样改变的;它看起来像一个错误。寻找解决方法的建议。谢谢!