2012-08-03 20 views
42

@JsonTypeInfoアノテーションをインターフェイスに使用できるかどうかを知りたいと思います。私はシリアライズされ、デシリアライズされるクラスのセットを持っています。ジャクソン注釈の多型:@JsonTypeInfoの使用

ここに私がやろうとしていることがあります。私は2つの実装クラスSub1,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以下の多型に基づいてオブジェクトをデシリアライズしたいと思います:id型

が含まれている必要がJSON文字列 :

予期しないトークン(END_OBJECT)、予想FIELD_NAMEを

+0

あなたはこれを見ましたか? http://jackson-users.ning.com/forum/topics/mapper-not-include-type-in​​formation-when-serializing-object-why?xg_source=activity他のセクションで説明したようなタイプのリストはありませんか?糸? –

+1

私はあなたが少し多くのコード(シリアル化、デシリアライゼーションがどのように行われているか)と、JSONが生成/消費されていることを示す必要があると思います。 – StaxMan

答えて

40

@ 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")を使用して名前を指定します。

値 'dog'と 'cat'は 'type'というプロパティに設定されます。

+0

お返事ありがとうございます。しかし、私はまだ同じエラーが発生します。 @JsonTypeInfoで何かを変更する必要があると思いますか? – Chris

+2

JsonTypeInfoをインターフェイスに適用できるかどうかは知っていますか? – Chris

+0

入力json文字列に問題がある可能性があります。何かPOSTをしようとしていますか? –

関連する問題