2012-04-25 30 views
6

को बाहर करने के लिए जैक्सआरएस/जैक्सन को अनुकूलित करने के लिए हम जैक्सआरएस & जैक्सन का उपयोग कर रहे हैं ताकि हमारे ग्राहक को डेटा भेज सकें। चूंकि क्लाइंट जावास्क्रिप्ट है, इसलिए हमें उस संपत्ति के लिए वैध मान नहीं है (जो कि जेएक्सआरएस डिफ़ॉल्ट रूप से करता है) को वास्तव में शून्य मान या खाली सरणी भेजने की आवश्यकता नहीं है। क्या इसके चारों ओर एक रास्ता है?नक्स, खाली सूची, सरणी

एक उदाहरण। JaxRS इस भेजता है:

{"prop1":[],"prop2":null,"prop3":"foo"}

जहाँ हम साथ

{"prop3":"foo"}

उत्तर

8

इस पर निर्भर करने के कई तरीके हैं; एनोटेशन @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) एक तरीका है। या, चूंकि आप खाली सूची, सरणी भी छोड़ना चाहते हैं, NON_NULL को NON_EMPTY में बदलें।

इसे डिफ़ॉल्ट व्यवहार के रूप में कॉन्फ़िगर करना भी संभव है; जैक्सन 1.9 में:

mapper.setSerializationConfig(mapper.getSerializationConfig().withSerializationInclusion(
    JsonSerialize.Inclusion.NON_EMPTY)); 

और जैक्सन 2.0 में, थोड़ा सरल:

mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY); 
+0

ध्यान दें कि ये विधियां जैक्सन-केवल हैं, और जेएक्स-आरएस का उपयोग करके विक्रेता स्वतंत्र नहीं हैं। – Zero3

+0

हां। जहां तक ​​मुझे पता है, जेएक्स-आरएस के लिए कुछ मानकीकृत कॉन्फ़िगरेशन सेटिंग्स हैं, और कोई मूल्य श्रेणी एनोटेशन नहीं है। – StaxMan

2

आपके JSON से सभी छोड़ने गुण सबसे पहले दूर मिल गया है हो सकता है त्रुटियों या ग्राहक के पक्ष स्पष्ट नहीं कोड का कारण बन सकता - क्लाइंट साइड को यह जांचना है कि किसी दिए गए प्रॉपर्टी का उपयोग करने से पहले मौजूद है, अगर संपत्ति गुम है तो जावास्क्रिप्ट त्रुटि की सूचना दी जाएगी। उबाऊ सामान।

चूंकि HTTP संचार gzipped है, गुणों को हटाने से संभावित लाभ महत्वपूर्ण नहीं लगते हैं (मैं गलत हो सकता हूं, जाहिर है - मुझे आपका आवेदन नहीं पता)। अनुरोध प्राप्त करें प्रभावी ढंग से कैश किया जा सकता है, इसलिए इस तरह के अनुकूलन से बचने के लिए एक और कारण है।

आप जेएसओएन को जावा ऑब्जेक्ट्स के क्रमबद्धीकरण को अनुकूलित करने के रूप में अनुकूलित कर सकते हैं। आगे के स्पष्टीकरण के लिए यह प्रश्न How can I customize serialization of a list of JAXB objects to JSON? देखें।

+1

धन्यवाद। मैं अपने इरादों के बारे में ईमानदार से थोड़ा कम था। सचमुच, मैंने क्लाइंट को विकसित करते समय बहुत साफ स्थिर JSON के साथ शुरुआत की, लेकिन क्योंकि फ़ाइल में अधिकांश गुण वैकल्पिक हैं और शायद ही कभी उपयोग किए जाते हैं, सर्वर द्वारा उत्पन्न संस्करण बहुत बड़ा और बदसूरत था। आप शायद सही हैं, कि यह वास्तविक प्रदर्शन मुद्दा नहीं है, लेकिन यह पढ़ने से कहीं अधिक कठिन है। लिंक के लिए धन्यवाद। –

संबंधित मुद्दे