2016-06-21 47 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。

相關問題