का उपयोग करते हुए JSON को deserializing जब डिफ़ॉल्ट डिफ़ॉल्ट मान लागू करते हैं जब विभिन्न JSON संदेशों को deserializing, मैं एक निश्चित प्रकार के विशेषताओं के लिए एक डिफ़ॉल्ट मान प्रदान करना चाहता हूं। कक्षा में मूल्य निर्दिष्ट करने के लिए यह generally suggested है, लेकिन यदि आपको कई कक्षाओं में ऐसा करना है तो यह त्रुटि-प्रवण है। आप एक को भूल सकते हैं और डिफ़ॉल्ट मान के बजाय null
के साथ समाप्त हो सकते हैं। मेरा इरादा प्रत्येक संपत्ति को Optional<T>
से Optional.absent
पर सेट करना है। चूंकि null
ठीक है Optional
जैक्सन के साथ उनका उपयोग करके निराशाजनक साबित हुआ है, इसे खत्म करने की कोशिश कर रहा है।जैक्सन
जैक्सन की अधिकांश विशेषताएं जो आपको जेएसओएन पर deserialization प्रक्रिया फोकस को अनुकूलित करने की अनुमति देती हैं, जो कि ऑब्जेक्ट को तत्काल करने की प्रक्रिया के आसपास नहीं है, जो आप चाहते हैं। निकटतम मैं एक सामान्य समाधान के लिए हो रही हो रहे हैं मेरे अपने ValueInstantiator
निर्माण कर रहा है, लेकिन वहाँ दो शेष मुद्दों मैं कर रहे हैं:
- मैं इसे कैसे केवल
absent
रूपOptional
का दृष्टांत नहीं लेकिन के बाकी के साथ हस्तक्षेप कर सकता हूँ तत्काल प्रक्रिया? - मैं अपने परिणाम को
ObjectMapper
में अंतिम परिणाम कैसे तारूं?
अद्यतन: मैं स्पष्ट करने के लिए है कि मैं एक समाधान है कि संशोधित प्रत्येक क्लास कि Optional
के शामिल शामिल नहीं रहा हूँ चाहता हूँ। मैं डीआरवाई सिद्धांत का उल्लंघन करने का विरोध कर रहा हूं। जब भी हम Optional
को नई या मौजूदा कक्षा में जोड़ते हैं, तो मुझे या मेरे सहयोगियों को कुछ अतिरिक्त करने के बारे में सोचना नहीं चाहिए। मैं यह कहने में सक्षम होना चाहता हूं, "हर कक्षा में प्रत्येक वैकल्पिक क्षेत्र को मैं Absent
से पहले भर चुका हूं," केवल एक बार, और इसके साथ किया जाना चाहिए।
निम्नलिखित इसका मतलब है कि बाहर कर रहे हैं:
- सार माता पिता वर्ग (घोषित करने के लिए की जरूरत है)
- कस्टम बिल्डर/निर्माता/JsonDeserializer (प्रत्येक लागू वर्ग पर टिप्पणी की जरूरत है)
- Mixin के? मैंने प्रतिबिंब के साथ संयुक्त प्रयास किया, लेकिन मुझे नहीं पता कि कक्षा में मुझे कैसे पहुंचाया जा रहा है ...
इस समस्या के साथ समस्या है कि 'deserialize() 'को नहीं कहा जाता है यदि विशेषता जेएसओएन में नहीं है। मैं चाहता हूं कि उन्हें 'वैकल्पिक' एब्सेंट 'में मैप किया जाए। –
क्षमा करें, उस भाग को याद किया। मैं अपने जवाब के अंत में एक पैराग्राफ जोड़ता हूं ताकि यह सुझाव दिया जा सके कि मैंने यह किया है। –
बेहतर, लेकिन फिर भी मुझे प्रत्येक वर्ग को एनोटेट करना होगा जिसमें वैकल्पिक गुण हैं। मैं इसे पारदर्शी होना चाहता हूं। –