Utilizzando Jackson 2, sto cercando un generico in modo da serializzare gli oggetti come un valore singolo (quindi serializzarli in seguito popolando solo quel singolo campo) senza dover ripetutamente creare un JsonSerializer/JsonDeserializer per gestire ciascun caso. L'annotazione @JsonIdentityInfo è abbastanza vicina, ma manca un po 'il marchio dato che, per quanto posso dire, serializzerà sempre l'intero oggetto figlio alla prima occorrenza.Jackson - serializza/deserializza la proprietà come valore JSON
Ecco un esempio di ciò che voglio fare. Date le classi:
class Customer {
Long id = 99;
String name = "Joe";
// Lots more properties
}
class Order {
String orderNum = "11111"
@WhateverAnnotationsINeedHereToDoWhatIWant
Customer customer;
}
Vorrei Ordine di serializzare sia come (o sarebbe perfettamente accettabile per me):
{"orderNum":"11111", "customer":"99"}
{"orderNum":"11111", "customer":{"id":99}}
Cosa @JsonIdentityInfo rende più difficile da affrontare sul client -side (possiamo supporre che il cliente sappia come mappare l'ID cliente nelle informazioni complete del cliente).
@JsonIgnoreProperties potrebbe anche essere abbastanza vicino per il secondo JSON mostrato, ma significherebbe che dovrei opt-out di tutto ma quello che voglio.
Al momento della deserializzazione, desidero solo che il cliente venga inizializzato con il campo "id".
Qualunque modo magico di fare ciò che mi manca senza entrare negli interni zuppa di Jackson? Per quanto posso dire, JsonDeserializer/JsonSerializer non ha informazioni contestuali sul genitore quindi non sembra essere un modo semplice per creare un @JsonValueFromProperty ("id") tipo Jackson Mix-in quindi basta guardare quell'annotazione in il Serializzatore/Deserializzatore personalizzato.
Qualsiasi idea sarebbe molto apprezzata. Grazie!
Grazie Integrating Stuff! Quella soluzione semplice in realtà sembra abbastanza praticabile per me, e ora sembra orribile;). In assenza di un'annotazione @JsonIgnorePropertiesExcept ("id"), penso che andrà bene. – jonc