2013-01-21 15 views
10

जैक्सन में प्राइमेटिव को क्रमबद्ध नहीं कर सकता, नल ऑब्जेक्ट्स को धारावाहिक होने से रोकने के लिए जेओएसएसरियललाइज एनोटेशन का उपयोग करना संभव है (@JsonSerialize (include = JsonSerialize.Inclusion.NON_NULL))। Primitives, हालांकि, शून्य पर सेट नहीं किया जा सकता है, इसलिए यह एनोटेशन किसी int की तरह काम नहीं करता है जिसे 0 स्पर्श नहीं किया गया है और 0.मैं जैक्सन को डिफ़ॉल्ट मान

क्या कोई एनोटेशन है जो मुझे कुछ " इस वर्ग के लिए, प्राइमेटिव को क्रमबद्ध न करें जब तक कि वे अपने डिफ़ॉल्ट मानों से अलग न हों "या" इस फ़ील्ड के लिए, यदि इसका मान एक्स है तो इसे क्रमबद्ध न करें "?

+0

आप एक कस्टम serializer का उपयोग कर विचार किया है:

इस दृष्टिकोण के लिए नकारात्मक पक्ष यह है कि उसके डिफ़ॉल्ट मान एक सेम संपत्ति की स्थापना का कोई प्रभाव नहीं है और संपत्ति अभी भी शामिल नहीं किया जाएगा होगा? यह सुनिश्चित नहीं है कि यह प्राइमेटिव के साथ कैसे काम करता है, लेकिन कम से कम इसे देखें। – atomman

+0

वह जवाब था जिसे मैं सुनने की उम्मीद नहीं कर रहा था =)। वेनिला सेटअप और जेसनप्रोपर्टी, जेसन इग्नोर और जेसनफिल्टर एनोटेशन के साथ अब तक सब कुछ वास्तव में अच्छा काम कर चुका है। हालांकि, मैं इसे देख लूंगा, धन्यवाद। – galactoise

उत्तर

20

परिभाषित आप अगर ': मेरी राय में आपके पास दो विकल्प जैक्सन के हाल के संस्करण का उपयोग कर आप JsonInclude.Include.NON_DEFAULT का उपयोग कर सकते हैं जो प्राइमेटिव के लिए काम करना चाहिए।

@JsonInclude(Include.NON_DEFAULT) 
public class Bean { 
    private int val; 
    public int getVal() { return val; } 
    public void setVal(int val) { this.val = val; } 
} 

Bean b = new Bean(); 
b.setVal(0); 
new ObjectMapper().writeValueAsString(b); // "{}" 
+0

वही है जो मैं ढूंढ रहा था! मेरे संस्करण को हाल ही में कितना होना चाहिए? – galactoise

+0

एक 'NON_DEFAULT' विकल्प के लिए अपने 'JsonSerialize.Inclusion' या' JsonInclude.Include' (यदि जैक्सन 2.x का उपयोग कर रहे हैं) की जांच करें, ऐसा लगता है कि यह मेरे विचार से अधिक लंबा रहा है – HiJon89

3

तथ्य यह है कि जावा में क्लास लोडर डिफ़ॉल्ट मान पर सेट होगा, सभी प्रारंभिक गुणों (int = 0, boolean = false आदि ...) शुरू नहीं किया है, ताकि आप उन्हें उन सेट से स्पष्ट रूप से अलग नहीं कर सकें आपका ऐप

  • उपयोग इसी पुरातन के बजाय आवरण वस्तुओं (पूर्णांक, बूलियन, लांग ..)
  • जैसा कि पहले ही सुझाव दिया, एक कस्टम serializer
संबंधित मुद्दे