@JsonUnwrapped Jackson এর একটি শক্তিশালী অ্যানোটেশন, যা nested objects বা complex objects কে একত্রে একটি ফ্ল্যাট JSON ফরম্যাটে রূপান্তর করতে ব্যবহৃত হয়। সাধারণত, যখন আপনি একটি জটিল অবজেক্টকে JSON-এ রূপান্তর করেন, তখন এটি একটি nested structure তৈরি করে। কিন্তু @JsonUnwrapped ব্যবহার করলে, আপনি এই nested অবজেক্টের ফিল্ডগুলোকে সরাসরি parent object-এর মধ্যে যুক্ত করতে পারবেন।
@JsonUnwrapped এর ব্যবহার
- Flattening Nested Objects: Nested অবজেক্টগুলোকে parent object-এর ফিল্ডের মতো একটি সমতল (flat) structure-এ JSON-এ পরিবর্তন করতে।
- Serialization: Nested অবজেক্টের সমস্ত ফিল্ড parent object-এ একত্রিত হয়ে JSON আউটপুট তৈরি হয়।
- Deserialization: JSON থেকে nested অবজেক্টের সমস্ত ফিল্ড parent object-এর মধ্যে সঠিকভাবে মাপা হয়।
প্রথম উদাহরণ: Basic @JsonUnwrapped
ক্লাস তৈরি করা:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class Address {
private String street;
private String city;
private String state;
// Constructors, Getters and Setters
public Address(String street, String city, String state) {
this.street = street;
this.city = city;
this.state = state;
}
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 String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
Parent ক্লাস (Person) তৈরি করা:
public class Person {
private String name;
private int age;
@JsonUnwrapped
private Address address;
// Constructors, Getters and Setters
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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", "IL");
Person person = new Person("John Doe", 30, address);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John Doe",
"age": 30,
"street": "1234 Elm St",
"city": "Springfield",
"state": "IL"
}
ব্যাখ্যা:
- এখানে,
Addressক্লাসটিPersonক্লাসের একটি ফিল্ড হিসেবে থাকে। @JsonUnwrappedব্যবহার করা হয়েছেPersonক্লাসেরaddressফিল্ডের উপরে।Addressক্লাসের সমস্ত ফিল্ডগুলো সরাসরিPersonJSON অবজেক্টের মধ্যে যোগ হয়ে গেছে। ফলে,street,city, এবংstateফিল্ডগুলো nested structure হিসেবে না গিয়ে, flat structure হিসেবে রয়েছে।
দ্বিতীয় উদাহরণ: @JsonUnwrapped with Nested Objects
Address Class (এবার, এটি আরও জটিল হতে পারে):
public class Address {
private String street;
private String city;
private String state;
private String zipCode;
// Constructors, Getters, Setters
public Address(String street, String city, String state, String zipCode) {
this.street = street;
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
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 String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
Person Class:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class Person {
private String name;
private int age;
@JsonUnwrapped
private Address address;
// Constructors, Getters, Setters
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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", "IL", "62704");
Person person = new Person("John Doe", 30, address);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John Doe",
"age": 30,
"street": "1234 Elm St",
"city": "Springfield",
"state": "IL",
"zipCode": "62704"
}
@JsonUnwrapped এর অন্যান্য ব্যবহার:
Nested Object Unwrapping in a Collection
@JsonUnwrapped ব্যবহার করে আপনি একটি Collection বা List এর মধ্যে থাকা nested অবজেক্টগুলোর ফিল্ডগুলোও একত্রে ফ্ল্যাট JSON-এ রূপান্তর করতে পারেন।
Example:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import java.util.List;
public class Company {
private String name;
@JsonUnwrapped
private List<Person> employees;
// Constructors, Getters, Setters
}
এখানে, employees লিস্টের মধ্যে থাকা Person অবজেক্টের সমস্ত ফিল্ড flattened হয়ে যাবে JSON-এ।
@JsonUnwrapped এর সুবিধা:
- Flattening Nested Objects:
- Nested অবজেক্টগুলোকে সরাসরি parent object-এর অংশ হিসেবে একত্রিত করে একটি সমতল JSON তৈরি করা যায়।
- Simplified Structure:
- JSON ডেটা আরও সহজ এবং সংক্ষিপ্ত হয়, যা API-র জন্য আরও ব্যবহারকারী-বান্ধব।
- Flexible Serialization:
- Nested objects-এ ফিল্ডগুলোর মধ্যে ফ্ল্যাট স্ট্রাকচার সুবিধার জন্য উপকারী, যেখানে nested structure প্রয়োজন নেই।
@JsonUnwrappedএকটি শক্তিশালী অ্যানোটেশন যা nested objects কে সরাসরি parent object-এ একত্রিত করে JSON-এ রূপান্তর করতে সাহায্য করে।- এটি JSON-এ স্ট্রাকচার সহজ এবং ফ্ল্যাট করে তোলে, যা API বা ডেটা এক্সচেঞ্জের জন্য কার্যকর।
- Nested objects সমন্বিত JSON তৈরির জন্য এই অ্যানোটেশন ব্যবহারের ফলে কোড এবং ডেটা আরও পরিষ্কার এবং পারফরম্যান্সের জন্য উপযোগী হয়ে ওঠে।
Read more