Jackson Polymorphismus: so ordnen Sie mehrere Subtypen der gleichen Klasse
Ich bin mit Jackson 1.9.x.
Kleben mit den Tieren Beispiel, Hier ist, was ich gerne tun würde:
Sagen wir, ich habe eine Tier Klasse:
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
}
Ich würde gerne in der Lage sein, so etwas zu tun (wo ich die Karte ein paar Untertypen einer Klasse, und ein paar mehr in eine andere Klasse):
@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 {
}
Was ich jetzt gerade sehe ist, dass Jackson erkennt nur die Hund-zu-Säugetier und der Dodo-zu-Vogel-mapping. Dies ist, weil StdSubtypeResolver._collectAndResolve() erlaubt nur die gleiche Klasse, um sich einmal angemeldet (aufgrund der Umsetzung der NamedType.equals()).
Gibt es eine Lösung für das Problem bin ich zu sehen?
- Dieser scheint im Zusammenhang mit...
- Ich bin die Kennzeichnung StaxMan Antwort als die akzeptierte Antwort, aber eigentlich ist es die Idee, die er diskutiert in seinem follow-up, ich bin der Planung zu implementieren. Denn jetzt habe ich keinen plan-Datei ein RFE zu jackson-databind-issue-tracker.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht nicht durch die Verwendung von Annotationen. Probleme kommt von der Tatsache, dass eine solche Zuordnung nicht funktionieren würde, für die Serialisierung und Zuordnung nicht erwarten, eins-zu-eins (bijection) Beziehung.
Aber vielleicht möchten Sie eine Datei RFE auf jackson-databind-issue-tracker; hinzufügen von Unterstützung kann möglich sein.
Der Fehler wurde behoben in der version 2.6.0, so dass Sie nur update-Jackson-version 2.6.0 oder später. Die zusätzlichen Informationen hier und hier.
Ich auch vor dem gleichen Problem und fand heraus, dass der Subtyp mapping erwartet einzigartigen Klassen.
Was ich Tat, war zu erstellen, zwei Klassen, die sich der gleichen Basis-Klasse. Die erweiterten Klassen sind leer, da Sie die gleichen Eigenschaften haben wie die Basisklasse. Dann hat Sie auf der Subtyp anzeigen.
Zum Beispiel, in Ihrem Fall, es wird -
Ich es verstehe ist das nicht der beste Ansatz, aber solange das Problem nicht behoben ist, könnte es sein, der beste Weg, um dieses Problem zu beheben. Ich folgte diesem Ansatz für jetzt.
Hoffe es hilft dir!