2016-06-21 45 views
1

我的问题与“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对象列表。

我不确定为什么杰克逊是这样改变的;它看起来像一个错误。寻找解决方法的建议。谢谢!

回答

1

尝试2.7.5:由于类型分辨率重写导致了一些问题,虽然大多数是由2.7.3固定的,但2.7.4中还有一个问题。所以很可能你确实碰到了一个bug。

一般来说,尝试使用最新版本的次要版本是个不错的主意:目前没有很好的理由使用2.7.2,超过2.7.5。

相关问题