Das Standardverhalten von jackon scheint sowohl Eigenschaften (Getter und Setter) als auch Felder zum Serialisieren und Deserialisieren in json zu verwenden.
Ich möchte die Felder als kanonische Quelle für die Serialisierungskonfiguration verwenden und möchte daher nicht, dass Jackson die Eigenschaften überhaupt betrachtet.
Ich kann dies auf individueller Klassenbasis mit der Anmerkung tun:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Aber ich möchte das nicht auf jede einzelne Klasse anwenden müssen ...
Ist es möglich, dies global zu konfigurieren? Möchten Sie dem Object Mapper etwas hinzufügen?
INFER_PROPERTY_MUTATORS
Flagge. Es erzwingt die Sichtbarkeit von Setzern, wenn ein sichtbarer Getter oder ein sichtbares Feld vorhanden ist.Antworten:
Sie können einzelne ObjectMapper wie folgt konfigurieren:
Wenn Sie möchten, dass es global festgelegt wird, greife ich normalerweise über eine Wrapper-Klasse auf einen konfigurierten Mapper zu.
quelle
withGetterVisibility
behandelt keineis*
Methoden, aber es gibtwithIsGetterVisibility
für sie.setVisibilityChecker
ist veraltet. Verwenden SiesetVisibility
stattdessen.In Jackson 2.0 und höher können Sie einfach Folgendes verwenden:
um die automatische Erkennung auszuschalten.
quelle
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Als Nächstes müssen Sie jede Eigenschaft, die Sie einschließen möchten, mit Anmerkungen versehen@JsonProperty
Speziell für
boolean is*()
Getter:Ich habe viel Zeit damit verbracht, warum weder unten
noch das
arbeitete für meinen Boolean Getter / Setter.
Die Lösung ist einfach:
UPDATE: Spring-Boot erlaubt konfigurieren:
Siehe Allgemeine Anwendungseigenschaften # JACKSON
quelle
für jackson 1.9.10 benutze ich
um die automatische Widmung auszuschalten.
quelle
Wie wäre es damit: Ich habe es mit einem Mixin verwendet
nicht konformes Objekt
Mixin:
Verwendung:
Es gibt nichts, was besagt, dass Sie nicht für jede Anzahl von Klassen vorgehen und das gleiche Mixin anwenden können.
Wenn Sie nicht vertraut mit Mixins sind, dann sind sie vom Konzept her einfach: Die Struktur des mixin ist Super auferlegt auf der Zielklasse (nach jackson, nicht so weit wie die JVM betroffen ist ).
quelle
Wenn Sie dies global tun möchten, ohne sich um die Konfiguration Ihrer zu kümmern
ObjectMapper
, können Sie Ihre eigene Anmerkung erstellen:Jetzt müssen Sie nur noch Ihre Klassen mit Anmerkungen versehen
@JsonExplicit
und los geht's!@JsonAutoDetect
Stellen Sie außerdem sicher, dass Sie den obigen Aufruf bearbeiten , um sicherzustellen, dass die Werte auf das eingestellt sind, was mit Ihrem Programm funktioniert.Dank an https://stackoverflow.com/a/13408807 für die Unterstützung bei der Suche nach Informationen
@JacksonAnnotationsInside
quelle
Wenn Sie Spring Boot verwenden, können Sie Jackson wie folgt global konfigurieren :
quelle