Biorąc pod uwagę klasę JSON odwzorowany tak:Jak poprawnie używać Jackson @ JSONView, aby wykluczyć określone właściwości z serializacji domyślnej?
public class Person {
@JsonProperty
String getName() { ... }
@JsonProperty @JsonView(SpecialView.class)
String getId() { ... }
}
muszę to tylko właściwość name
gdy podczas korzystania z „normalną” serializacji (czyli bez widoku określony) i obejmują zarówno właściwości podczas szeregowania użyciu SpecialView
. Ale kiedy zrobić
objectMapper.writeValueAsString(object)
(tj, nie określając dowolny widzenia), nieruchomość id
jest włączone.
Jeśli robię
objectMapper..writerWithView(Object.class).writeValueAsString(object)
następnie zachowuje się zgodnie z oczekiwaniami. Problem polega na tym, że nie kontroluję całego kodu, który robi serializację, więc nie mogę wymusić tego wszystkiego, aby określić widok.
Kiedy wszedł poprzez kod źródłowy Jackson (v 2.5.4), widzę, że com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields()
nie używa _filteredProps
jeśli nie ma „Widok aktywny”:
if (_filteredProps != null && provider.getActiveView() != null) {
props = _filteredProps;
} else {
props = _props;
}
Wydaje się dziwne, że będzie serializacji nie szanować @JsonView
, gdy nie określono widoku. Czy czegoś brakuje?
Czy istnieje sposób na osiągnięcie tego, czego chcę?
Byłoby to dobre rozwiązanie, ale jak już mówiłem w pytaniu Nie kontroluję kodu, który tworzy i konfiguruje obiekt 'ObjectMapper' –