Jackson Jaxb Annotation Precedence - @JsonProperty überschreibt @XmlTransient

8

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.

    
kldavis4 28.12.2012, 21:50
quelle

1 Antwort

7

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 .

    
kldavis4 04.01.2013, 22:06
quelle

Tags und Links