2016-06-21 27 views
1

私の問題は "Jackson and generic type reference"のようですが、私のジェネリッククラスが抽象クラスであるため、具体的な型にマップする必要があります。これはJackson v2.5.3ではうまく動作しましたが、最近のJacksonの変更(v2.7.2以前)では壊れています。抽象型を具体的な型にマッピングするときにJacksonが型バインディングを落としています

私は抽象クラスPageと具象クラスPageImplを持っています。私はPageImpl、問題はないとページをデシリアライズすることができるように使用される:

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

が、今、私はジャクソンが具体的な形に抽象型をマップするとき、それはタイプのバインディングをドロップすることを、ソースのデバッグを経て学びました。それは私がジャクソンを教えている場合、それはPageImplに出力タイプをマップするだろうと...タイプページに与えられたJSON文字列< XYZ> ...

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

をdeserすることを意味しますが、それは前のタイプのバインディングをドロップJSONをPageImplにデシリアライズします。この結果、PageImpl POJOには、XYZオブジェクトのリストではなく、LinkedHashMapオブジェクトのListが含まれます。

ジャクソンがこのように変更された理由はわかりません。それはバグのようです。回避策に関する提案を探してください。ありがとう!

答えて

1

Try 2.7.5:タイプ解決の書き換えによる問題がありました。ほとんどの場合2.7.3で修正されましたが、2.7.4ではもう1つありました。だから、あなたは本当にバグを起こしたでしょう。

一般に、マイナーバージョンの最新のパッチバージョンを試してみることをお勧めします。この時点で2.7.2を使用する正当な理由は2.7.5以上ありません。

関連する問題