2016-04-19 1 views
0

有する多型地図をデシリアライズ「Json2JavaModel」表現が異なるJSON表現のための共通基本インタフェースであるは、タイプ情報が文字列内の与えられたジャクソン、キー

public class Jason2JavaModel { 

    public String someAttribute; 

    public Map<String, Representation> representations; 

    public String getSomeAttribute() { 
     return someAttribute; 
    } 

    public void setSomeAttribute(String someAttribute) { 
     this.someAttribute = someAttribute; 
    } 

    @JsonProperty(value = "_embedded") 
    public Map<String, Representation> getRepresentations() { 
     return representations; 
    } 

    public void setRepresentations(
      Map<String, Representation> representations) { 
     this.representations = representations; 
    } 
} 

クラスを仮定する。シリアル化側では、Jacksonは実際のJavaタイプを認識しているので問題はありません。しかし、逆シリアル化は多態的に行わなければなりません。型情報は、すべてのエントリのマップキー内に格納されます(標準クラス名ではなく、一意のもの)。したがって、キーストリング< - >宛先クラス設定を提供することは可能です。 jacksonに、エントリ値を直列化解除するための型定義としてマップキーを使うべきであると伝える方法はありますか?

敬具、あなたがObjectMapperを探している マリウス

答えて

0

。例として、JSON POJO consumer of polymorphic objectsへの私の答えを見てください。

+0

こんにちはOldCurmudgeonとthxの返信です。あなたのソリューションを調べたところ、Map をEmbeddedRepresentationsContainerのような独自のクラスにラップすると動作します。次に、カスタマイズされたEmbeddedRepresentationsContainerDeserializerにあなたのアプローチを使用できます。残念なことに、この構造変更は、現在のAPIを破るか、より多くのメソッドを導入することを意味します。もし可能であれば、私たちはマップに固執してジャクソンに正しく逆シリアル化する方法を教えてください。 –