Jackson লাইব্রেরি ব্যবহার করার সময় ডেটা সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশনের সময় বিভিন্ন ধরনের ত্রুটি এবং এক্সেপশন দেখা দিতে পারে। এসব ত্রুটির বেশিরভাগই ডেটা ফরম্যাট, টাইপ মিসম্যাচ, বা কনফিগারেশন সমস্যার কারণে ঘটে।
Common Errors এবং তাদের কারণ
JsonMappingException- কারণ: JSON ডেটা এবং Java অবজেক্টের মধ্যে মিসম্যাচ।
- সমাধান: মডেল ক্লাস এবং JSON ডেটার ফিল্ড সঠিকভাবে মিলিয়ে দেখুন।
উদাহরণ: JSON-এ একটি অতিরিক্ত ফিল্ড আছে যা মডেল ক্লাসে অনুপস্থিত।
{ "name": "John", "age": 30, "address": "Unknown" }মডেল ক্লাস:
public class User { private String name; private int age; // Address ফিল্ড অনুপস্থিত }সমাধান:
@JsonIgnoreProperties(ignoreUnknown = true)যোগ করুন।@JsonIgnoreProperties(ignoreUnknown = true) public class User { private String name; private int age; }
JsonParseException- কারণ: JSON ফরম্যাট সঠিক নয়।
- সমাধান: JSON ডেটা সঠিকভাবে ফরম্যাট করা হয়েছে কিনা তা যাচাই করুন।
উদাহরণ: একটি JSON ফাইল যেখানে কমা অনুপস্থিত বা ব্রেস
{}সঠিকভাবে বন্ধ হয়নি।{ "name": "John", "age": 30 // কমা অনুপস্থিত
MismatchedInputException- কারণ: JSON ডেটা এবং মডেল টাইপের মধ্যে অমিল।
- সমাধান: JSON ডেটার টাইপ এবং মডেল ক্লাসের টাইপ যাচাই করুন।
উদাহরণ: JSON-এ একটি অ্যারে, কিন্তু মডেল একটি অবজেক্ট প্রত্যাশা করে।
[ { "name": "John", "age": 30 } ]মডেল ক্লাস:
public class User { private String name; private int age; }সমাধান: মডেল ক্লাসে লিস্ট ব্যবহার করুন।
List<User> users = objectMapper.readValue(json, new TypeReference<List<User>>() {});
UnrecognizedPropertyException- কারণ: JSON ডেটায় এমন একটি প্রপার্টি রয়েছে যা মডেল ক্লাসে নেই।
সমাধান:
@JsonIgnoreProperties(ignoreUnknown = true)ব্যবহার করুন।@JsonIgnoreProperties(ignoreUnknown = true) public class User { private String name; private int age; }
InvalidDefinitionException- কারণ: সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশনের জন্য যথাযথ কনস্ট্রাক্টর বা মেথড অনুপস্থিত।
- সমাধান: ডিফল্ট কনস্ট্রাক্টর বা
@JsonCreatorযোগ করুন। উদাহরণ: প্রাইভেট কনস্ট্রাক্টরের কারণে Jackson ডেসিরিয়ালাইজ করতে পারছে না।
public class User { private String name; private int age; private User() {} // প্রাইভেট কনস্ট্রাক্টর }সমাধান: একটি পাবলিক কনস্ট্রাক্টর যোগ করুন বা
@JsonCreatorব্যবহার করুন।@JsonCreator public User(@JsonProperty("name") String name, @JsonProperty("age") int age) { this.name = name; this.age = age; }
JsonProcessingException- কারণ: সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশনের সময় কোন সাধারণ ত্রুটি।
- সমাধান: Exception এর স্ট্যাকট্রেস দেখে ত্রুটির নির্দিষ্ট কারণ খুঁজুন।
JsonGenerationException- কারণ: JSON তৈরি করার সময় সমস্যা।
- সমাধান: সঠিক ডেটা টাইপ এবং ফরম্যাট নিশ্চিত করুন।
উদাহরণ: একটি সাইক্লিক রেফারেন্স।
public class User { private String name; private User friend; // সাইক্লিক রেফারেন্স }সমাধান:
@JsonManagedReferenceএবং@JsonBackReferenceব্যবহার করুন।
IOException- কারণ: ইনপুট বা আউটপুট ফাইল পড়ার বা লেখার সমস্যা।
- সমাধান: ফাইলের পাথ এবং অনুমতি যাচাই করুন।
MissingNodeবাNullNodeসমস্যা- কারণ: JSON নোড অনুপস্থিত।
- সমাধান: JSON ডেটা যাচাই করুন বা ডিফল্ট মান প্রদান করুন।
কিছু সাধারণ সমাধান
১. @JsonIgnoreProperties
JSON ডেটায় অপ্রত্যাশিত প্রপার্টি এড়াতে।
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
private String name;
private int age;
}
২. ডেটা টাইপ যাচাই
JSON এবং মডেল টাইপের মিল নিশ্চিত করুন।
ObjectMapper mapper = new ObjectMapper();
List<User> users = mapper.readValue(json, new TypeReference<List<User>>() {});
৩. ডিফল্ট কনস্ট্রাক্টর
মডেল ক্লাসে ডিফল্ট কনস্ট্রাক্টর যোগ করা।
public User() {
// ডিফল্ট কনস্ট্রাক্টর
}
৪. @JsonInclude
শর্তসাপেক্ষে ফিল্ড অন্তর্ভুক্ত করতে।
@JsonInclude(JsonInclude.Include.NON_NULL)
private String address;
৫. @JsonProperty
ফিল্ডের JSON নাম কাস্টমাইজ করতে।
@JsonProperty("user_name")
private String name;
Jackson ব্যবহার করার সময় সাধারণ সমস্যাগুলো এড়াতে:
- JSON ডেটার ফরম্যাট এবং টাইপ যাচাই করুন।
- মডেল ক্লাসে যথাযথ অ্যানোটেশন যোগ করুন।
- সঠিক কনফিগারেশন এবং
ObjectMapperব্যবহার নিশ্চিত করুন। - ত্রুটি হলে স্ট্যাকট্রেস বিশ্লেষণ করে সঠিক সমাধান খুঁজুন।
এই পদ্ধতিগুলি ব্যবহার করে Jackson সম্পর্কিত বেশিরভাগ ত্রুটি সহজেই সমাধান করা যায়।
Read more