Sto prelevando un albero di categorie e articoli da un servizio REST. Le categorie hanno un attributo "figlio" che contiene un elenco di categorie e/o articoli. I loro tipi sono specificati nel campo "tipo".Deserializzazione polimorfa di Jackson 2.1: come popolare il campo di testo su pojo?
La gestione del tipo polimorfico di Jackson è eccezionale e funziona come previsto, tranne un piccolo intoppo: il campo "tipo" non è popolato. C'è un modo semplice per ottenere questi dati sui pojos? Spero di non dover scrivere deserializzatori personalizzati.
Ecco la classe base per Categoria e Articolo. Le due sottoclassi aggiungono diversi campi scalari e non sono molto interessanti.
@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 {}
}
sto facendo la deserializzazione di un qualcosa di ObjectMapper come questo:
ObjectMapper mapper = new ObjectMapper();
Category category = mapper.readValue(inputStream, Category.class);
Penso che sia così irrilevante che non merita nemmeno un tag, ma solo nel caso, questo è in un'app per Android.
Ottimo lavoro investigativo! – StaxMan
Ranellato in questo esatto problema un paio di ore fa - hai salvato ciò che rimane dei miei capelli! tysm! – tbm