2013-07-09 9 views
40

के साथ केवल एक बच्चे की आईडी को क्रमबद्ध करने के लिए कैसे जैक्सन (fastxml.jackson 2.1.1) का उपयोग करते समय केवल बच्चे की आईडी को क्रमबद्ध करने का एक अंतर्निहित तरीका है? हम आरईएसटी के माध्यम से Order भेजना चाहते हैं जिसमें Person संदर्भ है। व्यक्ति वस्तु हालांकि काफी जटिल है और हम इसे सर्वर की तरफ ताज़ा कर सकते हैं, इसलिए हमें केवल प्राथमिक कुंजी की आवश्यकता है।जैक्सन

या क्या मुझे इसके लिए एक कस्टम धारावाहिक की आवश्यकता है? या मुझे @JsonIgnore अन्य सभी गुणों की आवश्यकता है? क्या ऑब्जेक्ट का अनुरोध करते समय Person डेटा को वापस भेजने से रोक दिया जाएगा? मुझे अभी तक यकीन नहीं है कि मुझे इसकी आवश्यकता होगी, लेकिन यदि संभव हो तो मैं इसके ऊपर नियंत्रण रखना चाहता हूं ...

+0

क्या यह मदद कर सकता है? http://stackoverflow.com/questions/8179986/jackson-change-jsonignore- गतिशील रूप से – Omertron

उत्तर

87

कुछ तरीके हैं।

public class Parent { 
    @JsonIgnoreProperties({"name", "description" }) // leave "id" and whatever child has 
    public Child child; // or use for getter or setter 
} 

एक और संभावना है, अगर बाल वस्तु हमेशा आईडी के रूप में धारावाहिक रूप है:: @JsonIdentityInfo उपयोग करने के लिए

public class Child { 
    // use value of this property _instead_ of object 
    @JsonValue 
    public int id; 
} 

और एक और दृष्टिकोण है सबसे पहले एक तो की तरह, एक बच्चे से गुण को दूर करने के @JsonIgnoreProperties उपयोग करने के लिए है

public class Parent { 
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
    @JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id 
    public Child child; // or use for getter or setter 

    // if using 'PropertyGenerator', need to have id as property -- not the only choice 
    public int id; 
} 

जो क्रमबद्ध करने के लिए भी काम करेगा, और आईडी के अलावा अन्य गुणों को अनदेखा करेगा। हालांकि ऑब्जेक्ट के रूप में परिणाम लपेटा नहीं जाएगा।

+0

यह वास्तव में उपयोगी है। धन्यवाद। जब आप '@JsonIdentityReference (alwaysAsId = true) 'का उपयोग करते हैं, तो जैक्सन इसे वापस Deserialize नहीं कर सकता है, है ना? कस्टम सीरिएलाइज़र/Deserializer लिखकर एक ही कार्यक्षमता प्राप्त करना संभव है? – miguelcobain

+1

सही - यदि कोई ऑब्जेक्ट आईडी मिलान करने के लिए नहीं है, तो जैक्सन इसे समझ नहीं सकता है; इसलिए आमतौर पर यह विकल्प serialize-only उपयोग केस के लिए समझ में आता है (जहां आवश्यकता हो तो कुछ और इसे वापस टुकड़ा कर सकता है)। कस्टम (डी) धारावाहिक कुछ भी आप कर सकते हैं, तो सैद्धांतिक रूप से हाँ। – StaxMan

+1

@StaxMan क्या आप कृपया बता सकते हैं कि मैं '@JsonIdentityReference (alwaysAsId = true' का उपयोग कैसे कर सकता हूं लेकिन मैं ऑब्जेक्ट में लपेटा परिणाम सामान्य विशेषता के रूप में नहीं लेना चाहता हूं। – Waqas