Dire che ho la seguente classe:Qual è l'equivalente di deserializzazione di Jackson di @JsonUnwrapped?
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
Produrre JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Come faccio a deserializzare questo ritorno nella classe genitore? Potrei usare @JsonCreator
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
Ma questo aggiunge anche efficace @JsonIgnoreProperties(ignoreUnknown=true)
alla classe Parent, come tutte le proprietà mappa a qui. Quindi, se volessi che i campi JSON sconosciuti generassero un'eccezione, dovresti farlo tu stesso. Inoltre, se i valori della mappa potrebbero essere qualcosa di diverso dalle stringhe, dovresti eseguire alcuni tipi di controllo e conversione manuali. C'è un modo per Jackson di gestire questo caso automaticamente?
Edit: potrei essere pazzo, ma questo in realtà sembra funzionare nonostante non essere mai esplicitamente menzionati nella documentazione: http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
ero abbastanza sicuro che non ha funzionato per me in precedenza. Tuttavia, l'approccio proposto @JsonCreator potrebbe essere preferito quando è richiesta una logica personalizzata per deserializzare i tipi polimorfici non imbustati.
Sei sicuro che '@ JsonUnwrapped' sta funzionando per la deserializzazione? Ho appena provato e sto ottenendo 'Impossibile leggere gli errori JSON: Uncecognized field ...' quando provo a deserializzare il JSON appiattito. –