@JsonUnwrapped Jackson-এর একটি অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় Nested Objects কে "unwrap" (অর্থাৎ, তাদের ফিল্ডগুলোকে মাদার অবজেক্টের মধ্যে সোজা ফ্ল্যাট আকারে) করার জন্য ব্যবহৃত হয়।
এই অ্যানোটেশনটি ব্যবহার করার ফলে, nested অবজেক্টের সকল ফিল্ড মাদার অবজেক্টের ফিল্ড হিসেবে দেখা যাবে এবং এটি JSON অবজেক্টে সরাসরি অন্তর্ভুক্ত হবে।
@JsonUnwrapped এর মূল উদ্দেশ্য
- Nested Object Flattening: একটি অবজেক্টের ভিতরের অবজেক্টের ফিল্ডগুলোকে মূল অবজেক্টের অংশ হিসেবে flatten করা যায়, যাতে JSON আউটপুটে এগুলো পৃথকভাবে না দেখায়, বরং একত্রে একটি JSON অবজেক্টে পরিণত হয়।
- Compact JSON Representation: JSON ফাইলটি আরো compact এবং সহজবোধ্য করতে সাহায্য করে, যখন nested অবজেক্টের ফিল্ডগুলো সরাসরি উপরের স্তরের অবজেক্টের অংশ হিসেবে অন্তর্ভুক্ত হয়।
@JsonUnwrapped এর ব্যবহার
১. সাধারণ উদাহরণ
ধরা যাক, আমাদের একটি Address অবজেক্ট এবং একটি Person অবজেক্ট আছে, যেখানে Person এর মধ্যে Address রয়েছে। সাধারণভাবে, যদি @JsonUnwrapped ব্যবহার না করা হয়, তাহলে Address অবজেক্টটি JSON-এ আলাদা অবজেক্ট হিসেবে থাকবে। কিন্তু @JsonUnwrapped ব্যবহার করে আমরা এটি ফ্ল্যাট করে ফেলতে পারি।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class Address {
private String street;
private String city;
// Constructors, Getters and Setters
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
public class Person {
private String name;
@JsonUnwrapped // This unwraps the Address fields into the Person object
private Address address;
// Constructors, Getters and Setters
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUnwrappedExample {
public static void main(String[] args) throws Exception {
Address address = new Address("1234 Elm St", "Springfield");
Person person = new Person("John Doe", address);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output (Unwrapped):
{
"name": "John Doe",
"street": "1234 Elm St",
"city": "Springfield"
}
ব্যাখ্যা:
@JsonUnwrappedএর মাধ্যমেPersonঅবজেক্টের মধ্যে থাকাAddressঅবজেক্টের ফিল্ডগুলো সরাসরি JSON আউটপুটেname,street, এবংcityহিসেবে যোগ হয়ে যায়।- Nested
Addressঅবজেক্টটি এখনPersonঅবজেক্টের অংশ হিসেবে ফ্ল্যাট হয়ে গেছে, এবংaddressনামক ফিল্ডটি আর JSON আউটপুটে দেখা যায় না।
@JsonUnwrapped এর আরও কিছু অপশন
২. @JsonUnwrapped এর prefix এবং suffix ব্যবহার
আপনি @JsonUnwrapped এর মাধ্যমে nested অবজেক্টের ফিল্ডগুলোর সাথে prefix এবং suffix যোগ করতে পারেন।
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class Person {
private String name;
@JsonUnwrapped(prefix = "address_") // Prefix for Address fields
private Address address;
// Constructors, Getters and Setters
}
Serialization Example (with prefix):
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUnwrappedPrefixExample {
public static void main(String[] args) throws Exception {
Address address = new Address("1234 Elm St", "Springfield");
Person person = new Person("John Doe", address);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output (with prefix):
{
"name": "John Doe",
"address_street": "1234 Elm St",
"address_city": "Springfield"
}
prefixযুক্ত করার মাধ্যমেaddress_streetএবংaddress_cityহিসেবে JSON ফিল্ডের নাম পরিবর্তিত হয়েছে।
@JsonUnwrapped এর ব্যবহারিক সুবিধা
- Compact JSON Structure:
- Nested অবজেক্টের ফিল্ডগুলো সরাসরি মূল অবজেক্টের সাথে যুক্ত হয়ে JSON স্ট্রাকচারকে আরও compact করে তোলে।
- API Response Clarity:
- বিশেষ করে REST API-তে, nested অবজেক্টের ক্ষেত্রগুলো ফ্ল্যাটভাবে পাওয়া সহজ হয়, যা ক্লায়েন্ট সাইডে প্রক্রিয়া সহজ করে।
- Customization:
prefixএবংsuffixযোগ করার মাধ্যমে আরো কাস্টমাইজড JSON ফরম্যাট তৈরি করা যায়।
@JsonUnwrapped এর সীমাবদ্ধতা
- Circular References:
- Circular references হলে
@JsonUnwrappedকাজ নাও করতে পারে। এটি Circular reference সমস্যা সমাধানে পর্যাপ্ত নয়, তাই তখন@JsonManagedReferenceএবং@JsonBackReferenceব্যবহার করা উচিত।
- Circular references হলে
- Complex Nested Structures:
- খুব গভীর nested structures-এ
@JsonUnwrappedএর ব্যবহার কিছুটা জটিল হতে পারে এবং JSON এর আউটপুট নন-স্ট্যান্ডার্ড হতে পারে।
- খুব গভীর nested structures-এ
@JsonUnwrappedহল একটি শক্তিশালী টুল, যা Nested অবজেক্টের ফিল্ডগুলোকে মূল অবজেক্টের অংশ হিসেবে "unwrap" করে JSON Serialization এবং Deserialization প্রক্রিয়া সহজ করে।- এটি compact JSON structure তৈরি করতে সাহায্য করে, এবং API response এর স্পষ্টতা বৃদ্ধি করে।
- prefix এবং suffix ব্যবহার করে JSON আউটপুটকে কাস্টমাইজ করা সম্ভব।
Read more