81

Jackson を使用していますが、問題が発生しています。オブジェクトを逆シリアル化しようとすると、次のエラーが発生します。

com.fasterxml.jackson.databind.JsonMappingException: 
    Can not construct instance of net.MyAbstractClass, 
    problem: abstract types either need to be mapped to concrete types, 
        have custom deserializer, or be instantiated with additional type information

属性に問題があります:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT, property = "@id")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyAbstractClass.class, name = "MyAbstractClass") })
@ManyToOne
private MyAbstractClass object;

誰でも私を助けることができますか?

4

8 に答える 8

59

抽象クラスをインスタンス化することはできません。ジャクソンもインスタンス化できません。MyAbstractClassを具象型でインスタンス化する方法に関する情報をJacksonに提供する必要があります。

stackoverflowでこの回答を参照してください:Jackson JSONライブラリ:抽象フィールドを含むクラスをインスタンス化する方法

また、 JacksonPolymorphicDeserializationも参照してください。

于 2012-10-05T18:23:53.103 に答える
6

あなたの@JsonSubTypes宣言は意味がありません。クラス自体ではなく、実装(サブ)クラスをリストする必要があります(これは無意味です)。したがって、そのエントリを変更して、存在するサブクラスを一覧表示する必要があります。または、他のメカニズムを使用してサブクラスを登録します( のSimpleModuleようなものがありますaddAbstractTypeMapping)。

于 2012-10-06T18:54:51.130 に答える