2017-01-16 5 views
1

this typeのフィールドを含むオブジェクトを整列させたいです。シリアライゼーションはうまく動作しますが、デシリアライズできません。 実装クラスは私の管理下にありません。一般に、コンストラクターやセッターがないため、元の実装クラスにデシリアライズすることはできません。ジャクソンは私のコントロール下にない多形型を非直列化します

一方、私はjsonに含まれるすべての情報(Javaオブジェクトとして)を保存したいと思います。

これを達成するための選択肢は何ですか、ベストプラクティスまたは良いプラクティスがありますか?

答えて

1

問題のクラス/フィールドでJackson Mixinsを使用して@JsonDeserialize(using=CostumDeserializer.class)注釈を偽装することができます。 次に、指定されたデシリアライザクラスでインスタンスを作成しようとすることができます。

// I'm not sure whether annotations (@JsonTypeInfo) on class level are supported as well to allow the polymorphistic type decision. 
abstract class MixIn { 

    // make constructor usable if available 
    MixIn(@JsonProperty("id") int a, @JsonProperty("name") String b) { } 

    @JsonDeserialize(using=CostumDeserializer.class) abstract TypeX getTypeX(); 

} 

そして、あなたはこの

objectMapper.addMixIn(TypeXContainer.class, MixIn.class); 

Doksのようにそれを使用することができます:http://wiki.fasterxml.com/JacksonMixInAnnotations

関連する問題