私の問題は "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が含まれます。
ジャクソンがこのように変更された理由はわかりません。それはバグのようです。回避策に関する提案を探してください。ありがとう!