Ich verwende Jackson (2.1.1) für die JSON-Serialisierung / Deserialisierung. Ich habe eine bestehende Klasse mit JAXB-Annotationen. Die meisten dieser Anmerkungen sind korrekt und können unverändert mit jackson verwendet werden. Ich verwende Mix-Ins, um die Deserialisierung / Serialisierung dieser Klassen geringfügig zu ändern.
In meinem ObjectMapper-Konstruktor mache ich folgendes:
%Vor% Aufgrund der obigen Ausführungen haben die Jackson-Annotationen wegen der Reihenfolge der Introspektoren Vorrang vor Jaxb. Dies basiert auf den Jackson Jaxb Dokumenten . Für Felder, die ignoriert werden sollen, funktioniert das Hinzufügen von @JsonIgnore
zum Feld im Mix-In einwandfrei. Es gibt einige Felder, die in den vorhandenen Klassen als @XmlTransient
markiert sind und nicht ignoriert werden sollen. Ich habe versucht, add @JsonProperty
zu dem Feld im Mix-In hinzuzufügen, aber es scheint nicht zu funktionieren.
Hier ist die ursprüngliche Klasse:
%Vor%Hier ist der Mix-in:
%Vor%Gibt es eine Idee, wie Sie das beheben können, ohne die ursprüngliche Klasse zu ändern?
Ich habe auch das Hinzufügen von @JsonProperty zu den Mitgliedern getestet, anstatt Mix-Ins zu verwenden:
%Vor%Ich habe anscheinend das gleiche Verhalten wie beim Mix-In. Solange @XmlTransient nicht entfernt wird, wird die Eigenschaft ignoriert.
Das Problem ist, dass die AnnotationIntrospectorPair.hasIgnoreMarker () -Methode die @ JsonProperty grundsätzlich ignoriert, wenn einer der beiden Introspectors einen Ignore-Marker erkennt:
%Vor%ref: Github
Eine Problemumgehung besteht darin, den JaxbAnnotationIntrospector von der Unterklasse abzusetzen, um das gewünschte Verhalten zu erhalten:
%Vor% Dann benutze einfach CustomJaxbAnnotationIntrospector
in AnnotationIntrospectorPair
.