Jackson একটি জনপ্রিয় লাইব্রেরি যা JSON (JavaScript Object Notation) ডেটার সাথে Java Objects এর Serialization (Object থেকে JSON) এবং Deserialization (JSON থেকে Object) কার্য সম্পাদন করে। Jackson Annotations JSON ডেটার কাঠামো এবং প্রয়োজনীয়তা অনুযায়ী ডেটার কাস্টমাইজেশন এবং নিয়ন্ত্রণের সুযোগ দেয়।
JSON কী এবং এর প্রয়োজনীয়তা
JSON (JavaScript Object Notation) হলো একটি হালকা ডেটা বিনিময় ফরম্যাট যা সহজেই পড়া এবং লেখা যায়। এটি মূলত key-value pairs আকারে ডেটা সংরক্ষণ করে।
JSON এর প্রয়োজনীয়তা
- Data Interchange: ক্লায়েন্ট এবং সার্ভার বা অ্যাপ্লিকেশনগুলোর মধ্যে ডেটা বিনিময়ের জন্য ব্যবহৃত।
- Language Agnostic: JSON বিভিন্ন প্রোগ্রামিং ভাষা সাপোর্ট করে।
- Readable and Lightweight: সহজে পড়া যায় এবং হালকা ওজনের।
- Integration Friendly: API-এর মাধ্যমে ডেটা এক্সচেঞ্জের জন্য আদর্শ।
Jackson Annotations এর প্রয়োজনীয়তা
Jackson Annotations JSON ডেটার সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ প্রক্রিয়া কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এগুলোর মাধ্যমে JSON এবং Java Object এর মধ্যে ম্যাপিং সহজ হয় এবং ডেটা ফরম্যাটের উপর পূর্ণ নিয়ন্ত্রণ পাওয়া যায়।
প্রয়োজনীয়তাগুলো:
- Custom Field Names: Java ফিল্ডের নাম পরিবর্তন করে JSON-এ মানচিত্রিত করা।
- Excluding Fields: কিছু ফিল্ড JSON থেকে বাদ দেওয়া।
- Default Values: JSON ডেটা না থাকলে ডিফল্ট মান ব্যবহার।
- Dynamic Field Handling: ডাইনামিক বা অজানা JSON ফিল্ড হ্যান্ডল করা।
প্রধান Jackson Annotations
১. @JsonProperty
- JSON ফিল্ডের নাম Java ফিল্ডের সাথে মানচিত্রিত করতে ব্যবহৃত হয়।
- প্রয়োজন: যখন JSON ফিল্ডের নাম Java ফিল্ডের নামের থেকে ভিন্ন হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;
class User {
@JsonProperty("user_name")
public String name;
@JsonProperty("user_age")
public int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
Serialized Output:
{
"user_name": "John",
"user_age": 30
}
২. @JsonIgnore
- JSON সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ থেকে একটি ফিল্ড বাদ দেওয়ার জন্য ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnore;
class User {
public String name;
@JsonIgnore
public String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
Serialized Output:
{
"name": "John"
}
৩. @JsonInclude
- কন্ডিশনাল ফিল্ড ইনক্লুশনের জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, null বা ডিফল্ট মানের ফিল্ড বাদ দিতে ব্যবহৃত।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
class User {
public String name;
public String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
}
Serialized Output (email null হলে):
{
"name": "John"
}
৪. @JsonFormat
- তারিখ বা সময় ফিল্ডের ফরম্যাট নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDate;
class User {
public String name;
@JsonFormat(pattern = "dd-MM-yyyy")
public LocalDate birthDate;
public User(String name, LocalDate birthDate) {
this.name = name;
this.birthDate = birthDate;
}
}
Serialized Output:
{
"name": "John",
"birthDate": "21-12-2024"
}
৫. @JsonCreator এবং @JsonProperty
- JSON ডেটা থেকে কনস্ট্রাক্টর বা ফ্যাক্টরি মেথড ব্যবহার করে অবজেক্ট তৈরি করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
class User {
private final String name;
private final int age;
@JsonCreator
public User(@JsonProperty("name") String name, @JsonProperty("age") int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Deserialized Input:
{
"name": "John",
"age": 30
}
৬. @JsonManagedReference এবং @JsonBackReference
- Bidirectional relationships হ্যান্ডল করতে ব্যবহৃত হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;
class User {
public String name;
@JsonManagedReference
public Address address;
}
class Address {
public String street;
@JsonBackReference
public User user;
}
৭. @JsonIdentityInfo
- Object references সংরক্ষণ করে bidirectional relationships সমাধান করতে ব্যবহৃত।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
class User {
public int id;
public String name;
}
JSON এবং Jackson এর ব্যবহার ক্ষেত্র
- REST APIs:
- ক্লায়েন্ট এবং সার্ভারের মধ্যে JSON ডেটা বিনিময়।
- Configuration Files:
- অ্যাপ্লিকেশন কনফিগারেশন ডেটা স্টোর করতে।
- Data Serialization:
- Object স্টোরেজ বা ডেটাবেসে JSON ফরম্যাটে ডেটা সংরক্ষণ।
- Data Interchange:
- ভিন্ন সিস্টেম বা ভাষার মধ্যে ডেটা ট্রান্সফার।
- JSON এর প্রয়োজনীয়তা: এটি হালকা, দ্রুত, এবং বহুভাষা সমর্থিত ডেটা বিনিময় ফরম্যাট।
- Jackson Annotations এর উপযোগিতা:
- ডেটা ফরম্যাট কাস্টমাইজেশন।
- JSON এবং Java Object এর মধ্যে ম্যাপিং সহজ করা।
- ডেটা প্রসেসিং আরও কার্যকর এবং মেমোরি-সাশ্রয়ী করা।
Jackson এবং এর অ্যানোটেশনগুলি ব্যবহার করে JSON ডেটা ব্যবস্থাপনা সহজ, দ্রুত এবং কার্যকর করা সম্ভব।
Read more