द DeserializationProblemHandler जब डिसेरिएलाइज़ेशन प्रक्रिया के दौरान संभावित रूप से पुनर्प्राप्त करने योग्य समस्या का सामना करना पड़ता है, तो क्लास को कॉल करने के लिए पंजीकृत किया जा सकता है। हम handleUnknownProperty() को लागू करके JSON को अक्रमांकन करते समय उत्पन्न त्रुटियों को संभाल सकते हैं DeserializationProblemHandler . की विधि कक्षा।
सिंटैक्स
पब्लिक बूलियन हैंडलअननोनप्रॉपर्टी (डिसेरिएलाइज़ेशन कॉन्टेक्स्ट ctxt, JsonParser p, JsonDeserializer deserializer, Object beanOrClass, String propertyName) IOException को थ्रो करता है
उदाहरण
आयात करें स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) JsonMappingException, JsonGenerationException, IOException {स्ट्रिंग jsonString ="{\"id\":\"101\", \"name\":\"Ravi Chandra\", \"address\ ":\"पुणे\", \"वेतन\":\"40000\" }"; ऑब्जेक्टमैपर ऑब्जेक्टमैपर =नया ऑब्जेक्टमैपर (); DeserializationProblemHandler deserializationProblemHandler =नया UnMarshallingErrorHandler (); objectMapper.addHandler (deserializationProblemHandler); ग्राहक ग्राहक =objectMapper.readValue (jsonString, Customer.class); System.out.println (ग्राहक); }}// UnMarshallingErrorHandler वर्ग क्लास UnMarshallingErrorHandler DeserializationProblemHandler को बढ़ाता है {@ ओवरराइड पब्लिक बूलियन हैंडल अज्ञातप्रॉपर्टी (DeserializationContext ctxt, JsonParser jp, JsonDeserializer deserializer, Object beanOrClass, String propertyName) IOException, JsonProcessingException {बूलियन परिणाम =असत्य फेंकता है; super.handleUnknownProperty(ctxt, jp, deserializer, beanOrClass, propertyName); सिस्टम। सच लौटना; // अक्रमांकन प्रक्रिया को सूचित करने के लिए सही है कि हम त्रुटि को संभाल सकते हैं और यह अक्रमांकन जारी रख सकता है और गलत लौटाता है, अगर हम अक्रमांकन को तुरंत रोकना चाहते हैं। }}// ग्राहक क्लासक्लास ग्राहक { निजी इंट आईडी; निजी स्ट्रिंग नाम; निजी स्ट्रिंग पता; सार्वजनिक int getId () {रिटर्न आईडी; } सार्वजनिक शून्य setId (int id) {this.id =id; } सार्वजनिक स्ट्रिंग getName () {वापसी का नाम; } सार्वजनिक शून्य सेटनाम (स्ट्रिंग नाम) { यह नाम =नाम; } सार्वजनिक स्ट्रिंग getAddress () {वापसी पता; } सार्वजनिक शून्य सेट पता (स्ट्रिंग पता) { यह पता =पता; } @ ओवरराइड पब्लिक स्ट्रिंग टूस्ट्रिंग () {रिटर्न "ग्राहक [आईडी =" + आईडी + ", नाम =" + नाम + ", पता =" + पता + "]"; }}सच वापस आने पर आउटपुट
'वेतन' नाम की संपत्ति 'ग्राहक' प्रकार के वर्ग में मौजूद नहीं है [id=101, name=Ravi Chandra, address=Pune]
असफल होने पर आउटपुट
प्रॉपर्टी नाम 'वेतन' थ्रेड "मुख्य" com.fasterxml.jackson.databind.exc में 'ग्राहक' अपवाद के वर्ग में मौजूद नहीं है। गैर-मान्यता प्राप्त संपत्ति अपवाद:अपरिचित फ़ील्ड "वेतन" (वर्ग ग्राहक), चिह्नित नहीं है इग्नोरेबल के रूप में (3 ज्ञात गुण:"आईडी", "पता", "नाम"]) पर [स्रोत:(स्ट्रिंग)" {"आईडी":"101", "नाम":"रवि चंद्र", "पता":"पुणे", "वेतन":"40000"}"; लाइन:1, कॉलम:65] (संदर्भ श्रृंखला के माध्यम से:ग्राहक ["वेतन"]) com.fasterxml.jackson.databind.exc.Unमान्यता प्राप्तPropertyException.from (Unमान्यता प्राप्तPropertyException.java:61) पर com.fasterxml.jackson.databind पर। DeserializationContext.handleUnknownProperty(DeserializationContext.java:840)com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1179) पर com.fasterxml.jackson.databind.Deserializer.BeanUnknownProperxml.jackson.databind.deser.Base. java:1592) com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1570) पर com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize.com.com. .jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202) at com.fasterxml.jackson.databind.ObjectMapper.readValue .java:3205)com.fas . पर terxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3173) DeserializationErrorTest.main पर (DeserializationErrorTest.java:12)