কম্পিউটার

জাভাতে একটি JSON ডিসিরিয়ালাইজ করার সময় উত্পন্ন ত্রুটিগুলি কীভাবে পরিচালনা করবেন?


দি ডিসিরিয়ালাইজেশন প্রবলেমহ্যান্ডলার ৷ ডিসিরিয়ালাইজেশন প্রক্রিয়া চলাকালীন একটি সম্ভাব্য পুনরুদ্ধারযোগ্য সমস্যার সম্মুখীন হলে কল করার জন্য ক্লাস নিবন্ধিত করা যেতে পারে। আমরা HandleUnknownProperty() প্রয়োগ করে JSON-কে ডিসিরিয়ালাইজ করার সময় উত্পন্ন ত্রুটিগুলি পরিচালনা করতে পারি Deserialization ProblemHandler এর পদ্ধতি ক্লাস।

সিনট্যাক্স

public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser p, JsonDeserializer deserializer, Object beanOrClass, String propertyName) throws IOException

উদাহরণ

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.*;
public class DeserializationErrorTest {
   public static void main(String[] args) throws JsonMappingException, JsonGenerationException, IOException {
      String jsonString = "{\"id\":\"101\", \"name\":\"Ravi Chandra\", \"address\":\"Pune\", \"salary\":\"40000\" }";
      ObjectMapper objectMapper = new ObjectMapper();
      DeserializationProblemHandler deserializationProblemHandler = new UnMarshallingErrorHandler();
      objectMapper.addHandler(deserializationProblemHandler);
      Customer customer = objectMapper.readValue(jsonString, Customer.class);
      System.out.println(customer);
   }
}
// UnMarshallingErrorHandler class
class UnMarshallingErrorHandler extends DeserializationProblemHandler {
   @Override
   public boolean handleUnknownProperty(DeserializationContext ctxt, JsonParser jp, JsonDeserializer deserializer, Object beanOrClass, String propertyName) throws IOException, JsonProcessingException {
      boolean result = false;
      super.handleUnknownProperty(ctxt, jp, deserializer, beanOrClass, propertyName);
      System.out.println("Property with name '" + propertyName + "' doesn't exist in Class of type '" + beanOrClass.getClass().getName() + "'");
      return true; // returns true to inform the deserialization process that we can handle the error and it can continue deserializing and returns false, if we want to stop the deserialization immediately.
   }
}
// Customer class
class Customer {
   private int id;
   private String name;
   private String address;
   public int getId() {
      return id;
   }
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }
   @Override
   public String toString() {
      return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";
   }
}

ট্রু হলে আউটপুট

Property with name 'salary' doesn't exist in Class of type 'Customer'
Customer [id=101, name=Ravi Chandra, address=Pune]

আউটপুট যখন মিথ্যা ফেরত দেওয়া হয়

Property with name 'salary' doesn't exist in Class of type 'Customer'
Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "salary" (class Customer), not marked as ignorable (3 known properties: "id", "address", "name"])
at [Source: (String)"{"id":"101", "name":"Ravi Chandra", "address":"Pune", "salary":"40000" }"; line: 1, column: 65] (through reference chain: Customer["salary"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:840)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1179)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1592) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1570) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:294)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:151)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4202)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3205)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3173)
at DeserializationErrorTest.main(DeserializationErrorTest.java:12)

  1. জাভা 9 এ জেশেলে একটি ব্যতিক্রম কীভাবে পরিচালনা করবেন?

  2. জাভাতে এক্সক্লুশন স্ট্র্যাটেজি ইন্টারফেস ব্যবহার করে কীভাবে একটি JSON কে সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করবেন?

  3. জাভাতে জ্যাকসন অবজেক্ট মডেলের সাথে JSON ডেটা কীভাবে ম্যাপ করবেন?

  4. জাভাতে JsonPointer ইন্টারফেস ব্যবহার করে একটি কী এর মান কিভাবে পেতে হয়?