Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में JSON को डिसेरिएलाइज़ करते समय उत्पन्न त्रुटियों को कैसे संभालें?


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) 

  1. Java में ExclusiveStrategy इंटरफ़ेस का उपयोग करके JSON को क्रमानुसार और deserialize कैसे करें?

    बहिष्करण रणनीति इंटरफ़ेस का उपयोग किसी भी फ़ील्ड को बाहर करने . के लिए किया जा सकता है क्रमांकन और अक्रमांकन के दौरान। हम बहिष्करण रणनीति . का एक कस्टम कार्यान्वयन प्रदान कर सकते हैं इंटरफ़ेस और इसे GsonBuilder . के साथ पंजीकृत करने की आवश्यकता है s . का उपयोग करना etExclusionStrategies() तरीका।

  1. जावा में जैक्सन ऑब्जेक्ट मॉडल के साथ JSON डेटा को कैसे मैप करें?

    द ऑब्जेक्टमैपर क्लास जावा ऑब्जेक्ट्स के बीच कनवर्ट करने और JSON कंस्ट्रक्शन से मेल खाने के लिए कार्यक्षमता प्रदान करता है। हम एक ऑब्जेक्ट मॉडल . द्वारा प्रस्तुत JSON डेटा की मैपिंग प्राप्त कर सकते हैं पेड़ के समान . का उपयोग करके किसी विशेष Java ऑब्जेक्ट के लिए डेटा संरचना जो संपूर्ण JSON सामग्री क

  1. जावा में JsonPointer इंटरफ़ेस का उपयोग करके किसी कुंजी के मान कैसे प्राप्त करें?

    JSONPointer एक मानक है जो स्ट्रिंग सिंटैक्स . को परिभाषित करता है जिसका उपयोग JSON दस्तावेज़ में किसी विशेष कुंजी मान तक पहुँचने के लिए किया जा सकता है। JSONPointer . का एक उदाहरण स्थिर फ़ैक्टरी विधि को कॉल करके बनाया जा सकता है createPointer() Json . पर कक्षा। JSONPointer में, प्रत्येक स्ट्रिंग