Data una classe JSON mappato simili:Come utilizzare correttamente @JSONView Jackson per escludere proprietà specifiche dalla serializzazione predefinita?
public class Person {
@JsonProperty
String getName() { ... }
@JsonProperty @JsonView(SpecialView.class)
String getId() { ... }
}
devo includere solo la proprietà name
quando quando si utilizza la serializzazione "normale" (cioè, senza vista specificato), e comprendono entrambe le proprietà durante la serializzazione utilizzando SpecialView
. Ma quando faccio
objectMapper.writeValueAsString(object)
(vale a dire, non specificando alcuna vista), la proprietà id
è incluso.
Se faccio
objectMapper..writerWithView(Object.class).writeValueAsString(object)
allora si comporta come previsto. Il problema è che non controllo tutto il codice che sta facendo la serializzazione, quindi non posso forzare tutto per specificare una vista.
Quando ho varcato il codice sorgente Jackson (v 2.5.4), vedo che com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields()
non usa il _filteredProps
se non c'è "vista attiva":
if (_filteredProps != null && provider.getActiveView() != null) {
props = _filteredProps;
} else {
props = _props;
}
Sembra strano che la serializzazione avrebbe non rispettare @JsonView
quando non viene specificata alcuna vista. Mi sto perdendo qualcosa?
C'è un modo per ottenere ciò che voglio?
Questa sarebbe una buona soluzione, ma come ho detto nella questione , Non controllo il codice che crea e configura 'ObjectMapper' –