57

@JsonTypeInfoインターフェイスにアノテーションを使用できるかどうかを知りたいです。シリアル化および逆シリアル化する必要がある一連のクラスがあります。

これが私がやろうとしていることです。Sub1を実装する 2 つのSub2実装クラスがありますMyInt。一部のモデル クラスには、実装型のインターフェイス参照があります。ポリモーフィズムに基づいてオブジェクトをデシリアライズしたい

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT)
@JsonSubTypes({
    @Type(name="sub1", value=Sub1.class), 
    @Type(name="sub2", value=Sub2.class)})
public interface MyInt{
}

@JsonTypeName("sub1")
public Sub1 implements MyInt{
}

@JsonTypeName("sub2")
public Sub2 implements MyInt{
}

私は次のようになりますJsonMappingException

予期しないトークン (END_OBJECT)、予期される FIELD_NAME: タイプ ID を含む JSON 文字列が必要です

4

2 に答える 2

50

@JsonSubTypes.Typeこのような値と名前が必要です。

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=As.WRAPPER_OBJECT, property="type")
@JsonSubTypes({       
    @JsonSubTypes.Type(value=Dog.class, name="dog"),
    @JsonSubTypes.Type(value=Cat.class, name="cat")       
}) 

サブクラスで@JsonTypeName("dog")は、名前を言うために使用します。
値はdogcatという名前のプロパティに設定されますtype

于 2012-08-03T15:14:09.647 に答える