Possibilità di configurare Jackson-JSON Mapper di escludere le proprietà in base a quale oggetto si tratta di serializzazione?
Domanda
Dire che ho oggetti come un business con un elenco di oggetti di indirizzo, e un Ordine che ha un business.
E 'possibile configurare in modo che quando l'Ordine è serializzato esclude l'elenco degli indirizzi dall'oggetto business, e quando il business è serializzato include la lista?
sto usando Ajax per estrarre i dati per una RIA e quando si lavora con l'Ordine non mi preoccupo per i dati degli indirizzi, ma quando si tratta di business voglio la lista.
Inoltre sto usando Hibernate per la persistenza quindi questa è davvero un'ottimizzazione efficienza e prestazioni.
Soluzione
Se ho capito bene domanda, sì, penso JSON Visualizzazioni per Jackson permetterebbe questo. Si potrebbe fondamentalmente creare due diversi punti di vista (profili) per lo stesso tipo e scegliere quale usare per la serializzazione.
Altri suggerimenti
È possibile utilizzare il JsonIgnore annotazione di ignorare il Indirizzo in serializzazione e spegnere l'uso di annotazioni nel ObjectMapper 's SerializationConfig durante la serializzazione di un Affari . Naturalmente, questo significa che altre annotazioni si potrebbe utilizzare vengono ignorate pure. Non perfetto, ma si potrebbe trovare una soluzione più bello in questo, spero che aiuta (ovviamente).
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().disable(Feature.USE_ANNOTATIONS);
Sì, è possibile farlo. Tutto ciò che serve è quello di dichiarare la lista dei Indirizzo come proprietà transitoria in te oggetto di business.
Quindi aggiungere il seguente codice al jsonConfig:
jsonConfig.setIgnoreTransientFields(true);
@JsonIgnore
viene utilizzato per ignorare le proprietà che non si desidera convertire in JSON.
public class UserDocument {
private long id;
private String documentUrl;
@JsonIgnore
private byte documentType;
//traditional getters and setters
}
Output: questo permette di convertire le proprietà di id e DocumentUrl , ma non converte proprietà DocumentType .
{
"id": 5,
"document_url": "/0/301115124948.jpg"
}