2016-09-20 7 views
10

यह प्रश्न this question बढ़ाता है।पूर्ण POJO डेटा बाइंड के साथ जैक्सन कस्टम फ़िल्टर

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

हालांकि, पहले के रूप में, कुछ क्षेत्रों में बाधाएं होती हैं जिन्हें पास करने की आवश्यकता होती है। अनिवार्य रूप से, मैं this के समान उत्तर की तलाश में हूं, लेकिन किसी भी गुण को सेट करने की आवश्यकता के बिना। बस एक कस्टम deserializer जो फ़िल्टर के रूप में कार्य करेगा और एक सीमा अपवाद को पूरा नहीं करता है अगर एक सीमा अपवाद को पूरा नहीं करता है। यदि फ़िल्टर के अंत तक कोई अपवाद नहीं फेंक दिया गया है, तो जैक्सन को जेएसओएन को पीओजेओ से स्वचालित रूप से बांधना चाहिए।

उत्तर

5

Json Schema जैसा लगता है आपकी आवश्यकताओं को पूरा कर सकता है। यह जेसन स्ट्रिंग्स के लचीले (और जटिल) सत्यापन नियमों को deserialized से पहले अनुमति देता है। इसमें अनिवार्य फ़ील्ड, रेगेक्स-आधारित वैल्यू चेक, इंडस्ट्री-स्टैंडर्ड फॉर्मेट्स (उदाहरण के लिए, आप फ़ील्ड को "ईमेल" प्रारूप के रूप में परिभाषित कर सकते हैं), क्रॉस-फील्ड निर्भरता (नवीनतम वी 4 में), आदि

उपरोक्त भाषा है पर निर्भर मानक। जावा इम्प्लेमेनेशन के लिए, मैंने this one का उपयोग किया जो नवीनतम जेसन स्कीमा संस्करण का समर्थन करता है (मानक अभी भी विकसित हो रहा है)। सत्यापनकर्ता का प्रारंभिक एकीकरण बहुत काम था, (मेरे बहुत गतिशील जेसन मॉडल के कारण) लेकिन इसके बाद यह नए सत्यापन नियमों को प्रस्तुत करने के लिए बहुत ही विश्वसनीय है (बस जेसन स्कीमा फ़ाइल को बदलने की आवश्यकता है)

+1

एचएम, मैं सोच रहा था कि क्या मैं नई निर्भरताओं को पेश किए बिना ऐसा कर सकता हूं। क्या आपको पता चलेगा कि जैक्सन की ऐसी कार्यक्षमता है या नहीं? –

+0

यह नहीं करता है। मैं जेसन सत्यापन क्षमताओं के साथ किसी अन्य पुस्तकालय के बारे में नहीं जानता –

2

बस विचार करने के लिए : यदि आप deserialization के दौरान सत्यापन के बारे में परवाह नहीं है, तो POOO कक्षा के लिए @JsonIgnoreProperties(ignoreUnknown = true) एनोटेशन का प्रयास करें। आप बाद में सत्यापन कर सकते हैं जहां वास्तविक व्यापार तर्क pojo कक्षाओं के साथ काम करता है।

5

मैं जैक्सन और Hibernate Vaildator संगत रूप से उपयोग करके deserialization और सत्यापन के लिए चिंताओं को अलग करने की सिफारिश करेंगे। विचार पीओजेओ में जेसन डेटा को deserialize करने के लिए सबसे पहले है, और फिर आवश्यकता के अनुसार पीओजेओ को मान्य करें। आपके मामले में, आप सत्यापन के लिए Class level constraints लागू कर सकते हैं। कक्षा स्तर की बाधाओं में बहुत लचीलापन होता है और ऑब्जेक्ट इंस्टेंस तक पहुंच करके एकाधिक सहसंबंधित गुणों को मान्य कर सकता है। यह अभी तक सरल है।

आमतौर पर सत्यापन को उच्च स्तर की चिंताओं की आवश्यकता होती है। Desrialization के बाद इसे संभालना बेहतर है। ऐसा करने से पीओजेओ और सत्यापन नियमों का प्रबंधन और पुन: उपयोग करने के लिए कोड अधिक आसानी से बना सकता है।

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