14

Jackson 1.9.x を使用しています。動物の例に固執すると、これが私がやりたいことです:

Animal クラスがあるとしましょう:

public class Animal {
    private String type;
    // accessors
}

public class Mammal extends Animal {
    private String diet;
    // accessors
}

public class Bird extends Animal {
    private boolean tropical;
    // accessors
}

私はこのようなことをしたいと思います (いくつかのサブタイプを 1 つのクラスにマップし、さらにいくつかのサブタイプを別のクラスにマップします):

@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({@JsonSubTypes.Type(value = Mammal.class, name = "Dog"),
                @JsonSubTypes.Type(value = Mammal.class, name = "Cat"),
                @JsonSubTypes.Type(value = Bird.class, name = "Dodo"},
                @JsonSubTypes.Type(value = Bird.class, name = "Cockatoo"})
public class Animal {

}

私が今見ているのは、ジャクソンが犬から哺乳類へのマッピングとドードーから鳥へのマッピングのみを認識するということです。これは、StdSubtypeResolver._collectAndResolve() が同じクラスを一度しか登録できないためです (NamedType.equals() の実装による)。

私が見ている問題の回避策はありますか?

4

4 に答える 4

4

おそらく、注釈を使用していない可能性があります。問題は、そのようなマッピングがシリアライゼーションでは機能しないという事実から生じ、既存のマッピングは 1 対 1 (全単射) の関係を想定しています。ただし、 jackson-databind issue trackerで RFE を提出することをお勧めします。サポートの追加が可能な場合があります。

于 2013-08-23T20:34:01.917 に答える