मैं जेएसओएन क्रमबद्धता/deserialization के लिए जैक्सन (2.1.1) का उपयोग कर रहा हूँ। मेरे पास जेएक्सबी एनोटेशन के साथ एक मौजूदा कक्षा है। इनमें से अधिकतर टिप्पणियां सही हैं और जैक्सन के साथ-साथ इसका उपयोग भी किया जा सकता है। मैं इन वर्गों के deserialization/serialization में थोड़ा बदलाव करने के लिए मिश्रण-इन्स का उपयोग कर रहा हूँ।जैक्सन जैक्सब एनोटेशन प्राथमिकता - @ जेसनप्रोपर्टी ओवरराइडिंग @XmlTransient
setAnnotationIntrospector(AnnotationIntrospector.pair(
new JacksonAnnotationIntrospector(),
new JaxbAnnotationIntrospector(getTypeFactory())));
ऊपर के आधार पर, जैक्सन एनोटेशन पूर्वता JAXB से अधिक, introspectors के आदेश की वजह से है:
मेरी ObjectMapper निर्माता में मैं निम्न कार्य करें। यह जैक्सन जैक्सब docs पर आधारित है। उन क्षेत्रों के लिए जिन्हें मैं अनदेखा करना चाहता हूं, मिश्रण में फ़ील्ड में @JsonIgnore
जोड़ना ठीक काम कर रहा है। ऐसे कुछ फ़ील्ड हैं जिन्हें मौजूदा कक्षाओं में @XmlTransient
के रूप में चिह्नित किया गया है जिन्हें मैं अनदेखा नहीं करना चाहता हूं। मैंने मिश्रण में फ़ील्ड में @JsonProperty
जोड़ने का प्रयास किया है, लेकिन ऐसा लगता है कि यह काम नहीं करता है।
public interface FooMixIn {
@JsonIgnore String getBaz(); //ignore the baz property
@JsonProperty String getBar(); //override @XmlTransient with @JsonProperty
}
किसी भी विचार कैसे मूल वर्ग को संशोधित करने के बिना इस को हल करने:
public class Foo {
@XmlTransient public String getBar() {...}
public String getBaz() {...}
}
यहाँ मिश्रण में है:
यहाँ मूल वर्ग है?
public class Foo {
@JsonProperty @XmlTransient public String getBar() {...}
@JsonIgnore public String getBaz() {...}
}
मैं के रूप में मैं मिश्रण में के साथ किया था समान व्यवहार प्राप्त करने लगते हैं:
मैं भी बजाय मिश्रण-इन का उपयोग कर के सदस्यों के लिए @JsonProperty जोड़ने का परीक्षण किया। जब तक @XmlTransient को हटाया नहीं जाता है, तो संपत्ति को अनदेखा किया जाता है।