Jackson লাইব্রেরি ব্যবহার করে যখন Nested Objects থাকে, তখন @JsonUnwrapped অ্যানোটেশন ব্যবহার করে এই nested objects-এর ফিল্ডগুলোকে সরাসরি JSON properties হিসেবে মেপ করা যায়। এতে nested object-এর ভিতরের ফিল্ডগুলোকে মূল JSON-এর অংশ হিসেবে প্রক্রিয়া করা হয়, যা এক্সট্রা নেস্টিং থেকে মুক্তি দেয়।
@JsonUnwrapped অ্যানোটেশন কী?
@JsonUnwrappedএকটি Jackson annotation যা nested object বা embedded object থেকে properties সরাসরি flattened করে JSON ডেটাতে প্রকাশ করে।- এর মাধ্যমে nested object এর সমস্ত ফিল্ডকে parent object এর JSON properties হিসেবে উপস্থিত করা যায়।
@JsonUnwrapped ব্যবহারের উদাহরণ
1. Nested Object Example:
ধরা যাক আমাদের একটি Address নামক ক্লাস রয়েছে, যা User নামক একটি ক্লাসের মধ্যে Nested Object হিসেবে রয়েছে।
Address Class:
public class Address {
private String street;
private String city;
private String zipCode;
// Constructors
public Address(String street, String city, String zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
// Getters and Setters
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 getZipCode() {
return zipCode;
}
public void setZipCode(String zipCode) {
this.zipCode = zipCode;
}
}
User Class with Nested Address Object:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class User {
private String name;
private int age;
@JsonUnwrapped
private Address address;
// Constructors
public User(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
// Getters and Setters
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 (Flattening Nested Object)
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUnwrappedExample {
public static void main(String[] args) throws Exception {
Address address = new Address("123 Main St", "Dhaka", "1212");
User user = new User("Rahim", 30, address);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(user);
System.out.println(json);
}
}
JSON Output:
{
"name": "Rahim",
"age": 30,
"street": "123 Main St",
"city": "Dhaka",
"zipCode": "1212"
}
এখানে, address এর street, city, এবং zipCode ফিল্ডগুলো সরাসরি User JSON-এর অংশ হয়ে গেছে, কারণ @JsonUnwrapped ব্যবহার করা হয়েছে।
@JsonUnwrapped ব্যবহার করে Nested Object গুলো Unwrap করা
- Flattening Nested Object:
@JsonUnwrappedএর সাহায্যে nested object-এর সকল প্রোপার্টি parent object-এর সঙ্গে যুক্ত হয়ে যায়।
- JSON Output Simple and Clean:
- Nested object গুলোর মধ্যে ভেতরের ডেটা দেখতে পাওয়া যায়, যাতে ফ্ল্যাট JSON তৈরি হয়।
Nested Object গুলোর উপর আরও কাস্টমাইজেশন
@JsonUnwrapped with prefix and suffix
Jackson এর @JsonUnwrapped অ্যানোটেশনকে আপনি prefix এবং suffix যুক্ত করতে পারেন, যা প্রতিটি nested object ফিল্ডের নামের আগে এবং পরে কাস্টম টেক্সট অ্যাড করবে।
Example with Prefix and Suffix:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class User {
private String name;
private int age;
@JsonUnwrapped(prefix = "address_")
private Address address;
// Constructors, Getters, and Setters
}
JSON Output with Prefix:
{
"name": "Rahim",
"age": 30,
"address_street": "123 Main St",
"address_city": "Dhaka",
"address_zipCode": "1212"
}
@JsonUnwrapped একটি Nested Object এর অংশবিশেষ JSON থেকে বাদ দেওয়া
যদি আপনি কিছু nested ফিল্ড বাদ দিতে চান, তবে আপনি @JsonIgnore অ্যানোটেশন ব্যবহার করতে পারেন।
Example:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Address {
private String street;
private String city;
@JsonIgnore
private String zipCode;
// Getters and Setters
}
এখানে zipCode ফিল্ডটি Unwrapped JSON থেকে বাদ দেওয়া হয়েছে, কারণ এতে @JsonIgnore অ্যানোটেশন ব্যবহার করা হয়েছে।
@JsonUnwrapped বনাম @JsonProperty
@JsonUnwrapped: এটি nested object কে parent JSON object এর মধ্যে সমন্বিত করে, এটি পুরো nested object ফিল্ড গুলি সরাসরি ফ্ল্যাট আউটপুটে প্রতিফলিত করে।@JsonProperty: এটি একটি নির্দিষ্ট Java ফিল্ড বা মেথডের নাম পরিবর্তন বা কাস্টমাইজ করার জন্য ব্যবহৃত হয়।
@JsonUnwrappedএকটি শক্তিশালী অ্যানোটেশন, যা nested objects-এর ডেটাকে parent object এর অংশ হিসেবে flatten করে।- এটি JSON structure সহজ এবং পরিষ্কার করতে সহায়তা করে, বিশেষত যখন nested data কাস্টম ফরম্যাটে প্রকাশ করতে হয়।
- Prefix এবং Suffix ব্যবহার করে JSON এর nested fields কাস্টমাইজ করা যায়।
- Circular references বা complex relationships এ কাজ করার সময়
@JsonIgnoreব্যবহার করে nested fields বাদ দেয়া সম্ভব।
@JsonUnwrapped Jackson এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা JSON ফরম্যাট সহজ করে তোলে এবং nested data সরাসরি উপস্থাপন করতে সহায়তা করে।
Read more