Jackson Annotations JSON ডেটা এবং Java Object-এর মধ্যে কাস্টমাইজড ম্যাপিং, সিরিয়ালাইজেশন, এবং ডেসিরিয়ালাইজেশনের জন্য ব্যবহার করা হয়। এই অ্যানোটেশনগুলো ডেটার ফরম্যাটিং, ফিল্ড এক্সক্লুশন, কাস্টম নামকরণ, এবং আরও অনেক ক্ষেত্রে সহায়ক।
Jackson Annotations এর ব্যবহার ডেটা প্রসেসিংয়ের কার্যকারিতা এবং নমনীয়তা বাড়ায়, বিশেষত RESTful API-তে JSON ডেটা হ্যান্ডল করার সময়।
Jackson Annotations-এর মূল সুবিধা
- Custom Mapping: JSON প্রপার্টি এবং Java ফিল্ডের মধ্যে কাস্টম নামকরণ বা কাস্টম লজিক প্রয়োগ।
- Field Exclusion: নির্দিষ্ট ফিল্ড JSON সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশন থেকে বাদ দেওয়া।
- Format Customization: ডেট, টাইম এবং অন্যান্য ডেটা ফরম্যাট কাস্টমাইজ করা।
- Polymorphic Handling: ইনহেরিটেড ক্লাসের ক্ষেত্রে সঠিক ডেটা টাইপ প্রসেস করা।
- Non-intrusive: মডেল ক্লাসে সরাসরি লজিক লিখতে না হয়ে Annotation-এর মাধ্যমে নিয়ন্ত্রণ করা।
1. Commonly Used Jackson Annotations
| Annotation | ব্যবহার |
|---|---|
@JsonProperty | ফিল্ডের জন্য JSON প্রপার্টি নাম কাস্টমাইজ করা। |
@JsonIgnore | নির্দিষ্ট ফিল্ড JSON সিরিয়ালাইজ বা ডেসিরিয়ালাইজ থেকে বাদ দেওয়া। |
@JsonInclude | Null বা ডিফল্ট মানের ফিল্ড JSON থেকে বাদ দেওয়া। |
@JsonFormat | ডেট এবং টাইম ফরম্যাট কাস্টমাইজ করা। |
@JsonCreator | ডেসিরিয়ালাইজেশনের সময় কাস্টম কনস্ট্রাক্টর বা মেথড ব্যবহার করা। |
@JsonValue | একটি অবজেক্ট JSON স্ট্রিং বা ভ্যালু হিসাবে সিরিয়ালাইজ করা। |
@JsonIgnoreProperties | একাধিক প্রোপার্টি JSON প্রসেসিং থেকে বাদ দেওয়া। |
@JsonAnyGetter | ডায়নামিক কী-ভ্যালু পেয়ার JSON-এ সিরিয়ালাইজ করা। |
@JsonAnySetter | ডায়নামিক কী-ভ্যালু পেয়ার JSON থেকে ডেসিরিয়ালাইজ করা। |
@JsonAutoDetect | JSON সিরিয়ালাইজেশনের জন্য ফিল্ড, সেটার বা গেটারের দৃশ্যমানতা নিয়ন্ত্রণ। |
2. Detailed Usage with Examples
(a) @JsonProperty
- JSON এবং Java ফিল্ডের মধ্যে নাম কাস্টমাইজ করতে ব্যবহৃত হয়।
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
@JsonProperty("user_id")
private int id;
@JsonProperty("user_name")
private String name;
private String email; // Default mapping
// Getters and Setters
}
JSON Input:
{
"user_id": 1,
"user_name": "John Doe",
"email": "john.doe@example.com"
}
(b) @JsonIgnore
- নির্দিষ্ট ফিল্ড JSON-এ অন্তর্ভুক্ত করা হবে না।
import com.fasterxml.jackson.annotation.JsonIgnore;
public class User {
private int id;
@JsonIgnore
private String password;
private String email;
// Getters and Setters
}
JSON Output:
{
"id": 1,
"email": "john.doe@example.com"
}
(c) @JsonInclude
- নির্দিষ্ট নিয়ম অনুযায়ী JSON থেকে ফিল্ড বাদ দেওয়া।
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private int id;
private String name;
private String email; // If null, excluded
// Getters and Setters
}
JSON Output (email=null):
{
"id": 1,
"name": "John Doe"
}
(d) @JsonFormat
- ডেট এবং টাইম ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়।
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date eventDate;
// Getters and Setters
}
JSON Output:
{
"eventDate": "2024-12-21 15:30:00"
}
(e) @JsonCreator
- ডেসিরিয়ালাইজেশনের সময় কাস্টম কনস্ট্রাক্টর ব্যবহার করা।
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private int id;
private String name;
@JsonCreator
public User(@JsonProperty("id") int id, @JsonProperty("name") String name) {
this.id = id;
this.name = name;
}
// Getters and Setters
}
JSON Input:
{
"id": 1,
"name": "John Doe"
}
(f) @JsonAnyGetter এবং @JsonAnySetter
- ডায়নামিক কী-ভ্যালু পেয়ার হ্যান্ডল করতে ব্যবহৃত হয়।
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;
public class DynamicProperties {
private Map<String, String> properties = new HashMap<>();
@JsonAnySetter
public void addProperty(String key, String value) {
properties.put(key, value);
}
@JsonAnyGetter
public Map<String, String> getProperties() {
return properties;
}
}
JSON Input/Output:
{
"key1": "value1",
"key2": "value2"
}
(g) @JsonAutoDetect
- দৃশ্যমানতার নিয়ম কাস্টমাইজ করতে ব্যবহৃত হয়।
import com.fasterxml.jackson.annotation.JsonAutoDetect;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class User {
private int id;
private String name;
}
JSON Output:
{
"id": 1,
"name": "John Doe"
}
3. Polymorphic Handling with @JsonTypeInfo
Polymorphic টাইপ সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের জন্য @JsonTypeInfo ব্যবহার করা হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Admin.class, name = "admin"),
@JsonSubTypes.Type(value = Customer.class, name = "customer")
})
public abstract class User {
public String name;
}
class Admin extends User {
public String adminCode;
}
class Customer extends User {
public String customerId;
}
JSON Input:
{
"type": "admin",
"name": "John Doe",
"adminCode": "A123"
}
Jackson Annotations Java এবং JSON ডেটার মধ্যে একটি ফ্লেক্সিবল ম্যাপিং প্রদান করে। এটি ডেভেলপারদের JSON ডেটা প্রসেসিং সহজ, কার্যকর এবং কাস্টমাইজযোগ্য করতে সাহায্য করে। REST API, ডেটা এক্সচেঞ্জ, এবং ফাইল প্রসেসিং-এর ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ।
সারাংশ:
- সাধারণ অ্যানোটেশন:
@JsonProperty,@JsonIgnore,@JsonInclude - ডেট ফরম্যাটিং:
@JsonFormat - ডায়নামিক ডেটা:
@JsonAnyGetter,@JsonAnySetter - পলিমরফিজম:
@JsonTypeInfo,@JsonSubTypes
Read more