Ich ziehe einen Baum von Kategorien und Elementen aus einem REST-Service. Kategorien haben ein Attribut "Kind", das eine Liste von Kategorien und/oder Elementen enthält. Ihre Typen sind im Feld "Art" angegeben.Jackson 2.1 polymorphe Deserialisierung: Wie Typ Feld auf Pojo zu füllen?
Jacksons polymorphe Typ Handhabung ist groß und alle wie erwartet, mit Ausnahme eines kleinen Haken: die „Art“ selbst das Feld nicht belegt ist. Gibt es eine einfache Möglichkeit, diese Daten auf die Pojos zu bekommen? Ich hoffe, dass ich keine benutzerdefinierten Deserializer schreiben muss. Hier
ist die Basisklasse für Kategorie und Artikel. Die zwei Unterklassen fügen mehrere skalare Felder hinzu und sind nicht sehr interessant.
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "kind",
defaultImpl = EntityBase.Impl.class
)
@JsonSubTypes({
@Type(value = Item.class, name = "Item"),
@Type(value = Category.class, name = "Category")
})
public abstract class EntityBase {
String title;
String kind;
public void setTitle(String title) { this.title = title; }
public String getTitle() { return title; }
public void setKind(String kind) { this.kind = kind; }
public String getKind() { return kind; }
public static class Impl extends EntityBase {}
}
Ich mache das Deserialisierungsereignis mit einem ObjectMapper etwas wie folgt aus:
ObjectMapper mapper = new ObjectMapper();
Category category = mapper.readValue(inputStream, Category.class);
Ich denke, es ist so irrelevant ist, dass es nicht einmal einen Tag nicht verdient, aber nur für den Fall, das ist in eine Android App
Ausgezeichnete detektivische Arbeit! – StaxMan
Vor ein paar Stunden ist dieses Problem aufgetaucht - du hast gerettet, was von meinen Haaren übrig geblieben ist! Tysm! – tbm