Jackson লাইব্রেরি JSON serialization এবং deserialization সহজ করতে বেশ কিছু অ্যানোটেশন প্রদান করে। এগুলো ব্যবহার করে JSON এবং জাভা অবজেক্টের মধ্যে কাস্টম ম্যাপিং তৈরি করা যায়।
1. Common Jackson Annotations
1.1 @JsonProperty
- একটি ফিল্ড বা মেথডের JSON প্রপার্টি নাম নির্ধারণ করে।
- Serialization এবং Deserialization উভয়ের জন্য প্রযোজ্য।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_name")
private String name;
@JsonProperty("user_age")
private int age;
// Getters and Setters
}
JSON ইনপুট/আউটপুট:
{
"user_name": "Alice",
"user_age": 25
}
1.2 @JsonIgnore
- নির্দিষ্ট ফিল্ডকে JSON Serialization/Deserialization থেকে বাদ দেয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
private String name;
@JsonIgnore
private String password;
// Getters and Setters
}
JSON আউটপুট:
{
"name": "Alice"
}
1.3 @JsonInclude
- কেবলমাত্র নির্দিষ্ট শর্ত পূরণ করা ফিল্ডগুলো JSON-এ যোগ করা হবে।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String name;
private String email;
// Getters and Setters
}
JSON আউটপুট (যদি email null হয়):
{
"name": "Alice"
}
1.4 @JsonFormat
- ডেট এবং টাইম ফরম্যাট কাস্টমাইজ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
private Date eventDate;
// Getters and Setters
}
JSON আউটপুট:
{
"name": "Conference",
"eventDate": "21-12-2024"
}
1.5 @JsonCreator এবং @JsonProperty
- Constructor বা Factory Method এর মাধ্যমে JSON ডেটা ম্যাপ করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
private int age;
@JsonCreator
public User(@JsonProperty("name") String name, @JsonProperty("age") int age) {
this.name = name;
this.age = age;
}
// Getters
}
JSON ইনপুট:
{
"name": "Alice",
"age": 25
}
1.6 @JsonAlias
- একটি JSON ফিল্ডের একাধিক বিকল্প নাম গ্রহণ করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonAlias;
public class User {
@JsonAlias({"userName", "user_name"})
private String name;
// Getters and Setters
}
JSON ইনপুট:
{
"userName": "Alice"
}
বা
{
"user_name": "Alice"
}
1.7 @JsonIgnoreProperties
- নির্দিষ্ট প্রপার্টিগুলো Serialization/Deserialization থেকে বাদ দেয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties({"password", "email"})
public class User {
private String name;
private String email;
private String password;
// Getters and Setters
}
1.8 @JsonManagedReference এবং @JsonBackReference
- Bi-directional Relationships থেকে Circular Dependency সমাধান করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;
import java.util.List;
public class Department {
@JsonManagedReference
private List<Employee> employees;
}
public class Employee {
@JsonBackReference
private Department department;
}
2. Advanced Annotations
2.1 @JsonUnwrapped
- একটি অবজেক্টকে Parent JSON-এর অংশ হিসেবে সরাসরি Serialize/Deserialize করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonUnwrapped;
public class User {
private String name;
@JsonUnwrapped
private Address address;
// Getters and Setters
}
public class Address {
private String street;
private String city;
// Getters and Setters
}
JSON আউটপুট:
{
"name": "Alice",
"street": "123 Main St",
"city": "Dhaka"
}
2.2 @JsonAnyGetter এবং @JsonAnySetter
- ডায়নামিক বা অতিরিক্ত প্রপার্টি হ্যান্ডল করার জন্য ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;
public class User {
private String name;
private Map<String, Object> properties = new HashMap<>();
@JsonAnySetter
public void setProperty(String key, Object value) {
properties.put(key, value);
}
@JsonAnyGetter
public Map<String, Object> getProperties() {
return properties;
}
}
JSON ইনপুট:
{
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}
JSON আউটপুট:
{
"name": "Alice",
"properties": {
"age": 25,
"email": "alice@example.com"
}
}
2.3 @JsonFilter
- ডাইনামিক ফিল্ড ফিল্টারিংয়ের জন্য ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFilter;
@JsonFilter("userFilter")
public class User {
private String name;
private int age;
// Getters and Setters
}
// Dynamic Filter Configuration
ObjectMapper mapper = new ObjectMapper();
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("name"));
mapper.setFilterProvider(filters);
3. Industry Standards এবং Best Practices
- Use Annotations Sparingly: প্রয়োজন অনুযায়ী
@JsonIgnore,@JsonInclude, ইত্যাদি ব্যবহার করুন। - Follow Naming Conventions: নামকরণ এবং JSON ফরম্যাট কনসিসটেন্ট রাখুন।
- Avoid Circular Dependencies:
@JsonManagedReferenceএবং@JsonBackReferenceব্যবহার করে সমাধান করুন। - Use Global Configurations for Common Tasks: ObjectMapper-এ গ্লোবাল কনফিগারেশন সেট করুন।
- Readable JSON Output:
SerializationFeature.INDENT_OUTPUTব্যবহার করুন।
Jackson annotations ব্যবহার করে JSON serialization এবং deserialization আরো কার্যকর এবং ফ্লেক্সিবল করা যায়।
Content added By