Jackson এবং JSON এর পরিচিতি

জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

316

JSON (JavaScript Object Notation):

  • JSON হল একটি লাইটওয়েট ডেটা এক্সচেঞ্জ ফরম্যাট।
  • এটি প্রধানত Key-Value Pairs এর উপর ভিত্তি করে গঠিত।
  • JSON ব্যবহার করে ডেটা স্টোর এবং ট্রান্সফার সহজ হয়, বিশেষত ওয়েব অ্যাপ্লিকেশন এবং RESTful API-তে।

JSON-এর উদাহরণ:

{
  "id": 1,
  "name": "Rahim",
  "email": "rahim@example.com"
}

Jackson:

  • Jackson একটি জনপ্রিয় Java লাইব্রেরি, যা JSON ডেটা প্রক্রিয়া করার জন্য ব্যবহৃত হয়।
  • এটি JSON Serialization (Java Object থেকে JSON) এবং Deserialization (JSON থেকে Java Object) সমর্থন করে।
  • Jackson দ্রুত এবং মেমোরি-দক্ষ একটি লাইব্রেরি।

Jackson এর মূল বৈশিষ্ট্য

  1. High Performance:
    • দ্রুত JSON প্রক্রিয়াকরণ।
    • বড় ডেটা সেট বা স্ট্রিমড JSON এর জন্য কার্যকর।
  2. Serialization এবং Deserialization:
    • Java Object থেকে JSON এ রূপান্তর (Serialization)।
    • JSON থেকে Java Object তৈরি (Deserialization)।
  3. Extensibility:
    • কাস্টম Serializer/Deserializer তৈরি করার ক্ষমতা।
  4. Annotations Support:
    • Annotations ব্যবহার করে JSON ডেটা কনফিগার করা সহজ।
  5. Compatibility:
    • Jackson JPA, Hibernate, Spring Framework ইত্যাদির সঙ্গে সহজেই সংযুক্ত হয়।
  6. Advanced Features:
    • Streaming API, Tree Model API, এবং Data Binding API এর মাধ্যমে JSON প্রসেসিং।

Jackson Annotations এর পরিচিতি

Jackson এর Annotations ব্যবহার করে JSON Serialization এবং Deserialization প্রক্রিয়া নিয়ন্ত্রণ করা যায়। এগুলি ডেটা ফরম্যাটিং, কাস্টমাইজেশন, এবং ফিল্ড ফিল্টারিং সহজ করে।

সাধারণ Jackson Annotations এবং তাদের ব্যবহার

Annotationব্যবহার
@JsonPropertyJSON ফিল্ডের নাম নির্ধারণ বা প্রয়োজনীয়তা নিশ্চিত করে।
@JsonIgnoreএকটি ফিল্ডকে Serialization/Deserialization থেকে বাদ দেয়।
@JsonIncludeশুধুমাত্র নির্দিষ্ট শর্তে ফিল্ডগুলো JSON-এ যোগ করে।
@JsonFormatডেটা ফরম্যাট (যেমন: তারিখ/সময়) নির্ধারণ করে।
@JsonCreatorকাস্টম Constructor বা Factory Method নির্ধারণ করে।
@JsonGetter এবং @JsonSetterনির্দিষ্ট Getter/Setter মেথডকে JSON Mapping এর জন্য নির্ধারণ করে।
@JsonManagedReference এবং @JsonBackReferenceCircular Reference সমাধান করে।
@JsonIdentityInfoObject ID দিয়ে Circular Reference হ্যান্ডেল করে।
@JsonViewভিউ নির্ধারণ করে, যা নির্দিষ্ট প্রসঙ্গে ফিল্ড দেখায়।

Jackson Annotations এর ব্যবহার

1. @JsonProperty

JSON ফিল্ডের নাম পরিবর্তন বা প্রয়োজনীয়তা নিশ্চিত করতে ব্যবহার করা হয়।

কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    @JsonProperty("user_id")
    private int id;

    @JsonProperty("full_name")
    private String name;

    private String email;

    // Getters and Setters
}
JSON আউটপুট:
{
  "user_id": 1,
  "full_name": "Rahim",
  "email": "rahim@example.com"
}

2. @JsonIgnore

একটি ফিল্ডকে JSON Serialization/Deserialization থেকে বাদ দেয়।

কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIgnore;

public class User {
    private int id;
    private String name;

    @JsonIgnore
    private String password;

    // Getters and Setters
}
JSON আউটপুট:
{
  "id": 1,
  "name": "Rahim"
}

3. @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;

    // Getters and Setters
}
JSON আউটপুট (যদি email=null):
{
  "id": 1,
  "name": "Rahim"
}

4. @JsonFormat

ডেটা ফরম্যাট নির্ধারণ করে, বিশেষত তারিখ ও সময়ের জন্য।

কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;

public class Event {
    private String name;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date date;

    // Getters and Setters
}
JSON আউটপুট:
{
  "name": "Meeting",
  "date": "2024-12-21 15:30:00"
}

5. @JsonManagedReference এবং @JsonBackReference

Parent-Child রিলেশনশিপ এবং Circular Reference সমস্যা সমাধান করতে ব্যবহৃত হয়।

কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;

public class Parent {
    private String name;

    @JsonManagedReference
    private Child child;

    // Getters and Setters
}

public class Child {
    private String name;

    @JsonBackReference
    private Parent parent;

    // Getters and Setters
}

6. @JsonIdentityInfo

Circular Reference সমাধানের আরেকটি পদ্ধতি, যা Object ID ব্যবহার করে কাজ করে।

কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class User {
    private int id;
    private String name;

    // Getters and Setters
}

Jackson এর সুবিধা

  1. বহুমুখিতা:
    • সহজ API এবং প্রচুর ফিচার দিয়ে JSON প্রক্রিয়াকরণ।
  2. পারফরম্যান্স:
    • দ্রুত JSON Serialization এবং Deserialization।
  3. Spring Integration:
    • Spring Boot এবং Spring MVC এর সঙ্গে সহজেই কাজ করে।
  4. Advanced Features:
    • Streaming API, Tree Model API এবং Data Binding API।

  1. JSON ডেটা এক্সচেঞ্জের জন্য একটি জনপ্রিয় ফরম্যাট এবং Jackson এটি Java-এর জন্য আরও সহজ করে তুলেছে।
  2. Annotations ব্যবহার করে JSON ডেটা কাস্টমাইজ এবং নিয়ন্ত্রণ করা সহজ।
  3. Jackson দ্রুত, মেমোরি-দক্ষ, এবং Spring Framework এর মতো টুলের সঙ্গে একীভূত করার জন্য উপযুক্ত।
Content added By

Jackson API হল একটি শক্তিশালী এবং বহুল ব্যবহৃত Java-based JSON library, যা JSON ডেটা প্রক্রিয়াকরণের জন্য ডেভেলপারদের সাহায্য করে। এটি JSON ডেটাকে Java Objects এ রূপান্তর (deserialization), এবং Java Objects কে JSON ডেটায় রূপান্তর (serialization) করতে ব্যবহৃত হয়। এটি সহজ, দ্রুত এবং কাস্টমাইজেবল JSON প্রক্রিয়াকরণ সক্ষম করে।


Jackson API-এর মূল বৈশিষ্ট্য

  1. Serialization এবং Deserialization:
    • JSON থেকে Java Object এ (deserialization) এবং Java Object থেকে JSON এ (serialization) রূপান্তর।
  2. High Performance:
    • দ্রুত ডেটা প্রক্রিয়াকরণের জন্য প্রায়শই ব্যবহার করা হয়।
  3. Annotations Support:
    • @JsonProperty, @JsonIgnore, @JsonFormat, @JsonCreator এর মতো অনেক অ্যানোটেশন প্রদান করে যা serialization এবং deserialization নিয়ন্ত্রণ করে।
  4. Streaming API Support:
    • বড় JSON ডেটা স্ট্রিম আকারে প্রক্রিয়া করার ক্ষমতা।
  5. Tree Model Support:
    • JSON ডেটাকে JsonNode এর মতো tree structure হিসেবে প্রক্রিয়া করা।
  6. Custom Modules:
    • Jackson-এর মাধ্যমে বিভিন্ন কাস্টম ডেটা টাইপের জন্য মডিউল যোগ করা যায়, যেমন Hibernate, Joda-Time, Java 8 Date/Time।

Jackson API-এর প্রধান মডিউলসমূহ

  1. jackson-core:
    • JSON ডেটা স্ট্রিম প্রসেসিংয়ের জন্য।
    • Contains JsonParser এবং JsonGenerator
  2. jackson-databind:
    • Java Object থেকে JSON এবং JSON থেকে Java Object-এ রূপান্তরের জন্য।
    • Contains ObjectMapper ক্লাস।
  3. jackson-annotations:
    • Jackson এর অ্যানোটেশন প্রদান করে যা serialization/deserialization নিয়ন্ত্রণ করে।
  4. jackson-modules:
    • বিশেষ মডিউল যেমন Hibernate, Joda-Time, এবং Java 8 Date/Time সাপোর্ট।

Jackson API-এর মূল উপাদানসমূহ

1. ObjectMapper

  • Jackson এর প্রধান ক্লাস যা serialization এবং deserialization পরিচালনা করে।
Serialization Example (Object to JSON)
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Create a simple Java object
        Person person = new Person("John Doe", 30);

        // Serialize object to JSON
        String json = mapper.writeValueAsString(person);
        System.out.println(json);
    }
}

class Person {
    private String name;
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getters and setters
}

Output:

{"name":"John Doe","age":30}

2. JsonNode

  • Tree Model ব্যবহার করে JSON ডেটার সাথে কাজ করতে।
Example (Tree Model):
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TreeModelExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"John\", \"age\":30}";
        ObjectMapper mapper = new ObjectMapper();

        // Read JSON as Tree Model
        JsonNode node = mapper.readTree(json);

        // Access fields
        String name = node.get("name").asText();
        int age = node.get("age").asInt();

        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Output:

Name: John
Age: 30

3. Streaming API

  • বড় JSON ডেটার জন্য JsonParser এবং JsonGenerator ব্যবহার করা হয়।
Example (JsonParser):
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

import java.io.StringReader;

public class StreamingExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"John\", \"age\":30}";
        JsonFactory factory = new JsonFactory();
        JsonParser parser = factory.createParser(new StringReader(json));

        while (!parser.isClosed()) {
            JsonToken token = parser.nextToken();
            if (token == JsonToken.FIELD_NAME) {
                System.out.println(parser.getCurrentName());
            }
        }
    }
}

Output:

name
age

Jackson এর প্রধান অ্যানোটেশনসমূহ

1. @JsonProperty

  • ফিল্ডের কাস্টম নাম নির্ধারণের জন্য।
import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    @JsonProperty("full_name")
    private String name;
    private int age;

    // Constructor, Getters, Setters
}

2. @JsonIgnore

  • নির্দিষ্ট ফিল্ড serialization থেকে বাদ দিতে।
import com.fasterxml.jackson.annotation.JsonIgnore;

public class Person {
    private String name;

    @JsonIgnore
    private int age;

    // Constructor, Getters, Setters
}

3. @JsonFormat

  • Date/Time ফরম্যাট নির্ধারণের জন্য।
import com.fasterxml.jackson.annotation.JsonFormat;

public class Event {
    @JsonFormat(pattern = "dd-MM-yyyy HH:mm")
    private Date eventDate;

    // Constructor, Getters, Setters
}

4. @JsonCreator

  • কাস্টম কন্সট্রাক্টর নির্ধারণের জন্য।
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    private String name;
    private int age;

    @JsonCreator
    public Person(@JsonProperty("name") String name, @JsonProperty("age") int age) {
        this.name = name;
        this.age = age;
    }
}

ব্যবহার ক্ষেত্র

  1. REST APIs: JSON ডেটা serialize এবং deserialize করতে।
  2. Microservices Communication: JSON ডেটা প্রক্রিয়াকরণের জন্য।
  3. Configuration Management: JSON ফাইল থেকে কনফিগারেশন লোড করতে।
  4. Data Processing Pipelines: বড় JSON ডেটা স্ট্রিম প্রক্রিয়াকরণের জন্য।

Jackson API একটি নির্ভরযোগ্য এবং সহজ টুল যা JSON ডেটার সাথে কাজ করার সময় খুবই কার্যকর। এটি serialization, deserialization, এবং customization এর জন্য বিভিন্ন ফিচার প্রদান করে।

  • সহজ অ্যানোটেশন ব্যবহার করে ডেটা প্রক্রিয়াকরণ সহজ করা যায়।
  • বড় JSON ডেটা ম্যানেজ করার জন্য এর Streaming API এবং Tree Model আদর্শ।

Jackson ব্যবহার করলে JSON ডেটার সাথে কাজ করা দ্রুত এবং কার্যকর হয়।

Content added By

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 এর প্রয়োজনীয়তা

  1. Data Interchange: ক্লায়েন্ট এবং সার্ভার বা অ্যাপ্লিকেশনগুলোর মধ্যে ডেটা বিনিময়ের জন্য ব্যবহৃত।
  2. Language Agnostic: JSON বিভিন্ন প্রোগ্রামিং ভাষা সাপোর্ট করে।
  3. Readable and Lightweight: সহজে পড়া যায় এবং হালকা ওজনের।
  4. Integration Friendly: API-এর মাধ্যমে ডেটা এক্সচেঞ্জের জন্য আদর্শ।

Jackson Annotations এর প্রয়োজনীয়তা

Jackson Annotations JSON ডেটার সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ প্রক্রিয়া কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এগুলোর মাধ্যমে JSON এবং Java Object এর মধ্যে ম্যাপিং সহজ হয় এবং ডেটা ফরম্যাটের উপর পূর্ণ নিয়ন্ত্রণ পাওয়া যায়।

প্রয়োজনীয়তাগুলো:

  1. Custom Field Names: Java ফিল্ডের নাম পরিবর্তন করে JSON-এ মানচিত্রিত করা।
  2. Excluding Fields: কিছু ফিল্ড JSON থেকে বাদ দেওয়া।
  3. Default Values: JSON ডেটা না থাকলে ডিফল্ট মান ব্যবহার।
  4. 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 এর ব্যবহার ক্ষেত্র

  1. REST APIs:
    • ক্লায়েন্ট এবং সার্ভারের মধ্যে JSON ডেটা বিনিময়।
  2. Configuration Files:
    • অ্যাপ্লিকেশন কনফিগারেশন ডেটা স্টোর করতে।
  3. Data Serialization:
    • Object স্টোরেজ বা ডেটাবেসে JSON ফরম্যাটে ডেটা সংরক্ষণ।
  4. Data Interchange:
    • ভিন্ন সিস্টেম বা ভাষার মধ্যে ডেটা ট্রান্সফার।

  1. JSON এর প্রয়োজনীয়তা: এটি হালকা, দ্রুত, এবং বহুভাষা সমর্থিত ডেটা বিনিময় ফরম্যাট।
  2. Jackson Annotations এর উপযোগিতা:
    • ডেটা ফরম্যাট কাস্টমাইজেশন।
    • JSON এবং Java Object এর মধ্যে ম্যাপিং সহজ করা।
    • ডেটা প্রসেসিং আরও কার্যকর এবং মেমোরি-সাশ্রয়ী করা।

Jackson এবং এর অ্যানোটেশনগুলি ব্যবহার করে JSON ডেটা ব্যবস্থাপনা সহজ, দ্রুত এবং কার্যকর করা সম্ভব।

Content added By

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

  1. Use Annotations Sparingly: প্রয়োজন অনুযায়ী @JsonIgnore, @JsonInclude, ইত্যাদি ব্যবহার করুন।
  2. Follow Naming Conventions: নামকরণ এবং JSON ফরম্যাট কনসিসটেন্ট রাখুন।
  3. Avoid Circular Dependencies: @JsonManagedReference এবং @JsonBackReference ব্যবহার করে সমাধান করুন।
  4. Use Global Configurations for Common Tasks: ObjectMapper-এ গ্লোবাল কনফিগারেশন সেট করুন।
  5. Readable JSON Output: SerializationFeature.INDENT_OUTPUT ব্যবহার করুন।

Jackson annotations ব্যবহার করে JSON serialization এবং deserialization আরো কার্যকর এবং ফ্লেক্সিবল করা যায়।

Content added By

Jackson Annotations JSON ডেটা এবং Java Object-এর মধ্যে কাস্টমাইজড ম্যাপিং, সিরিয়ালাইজেশন, এবং ডেসিরিয়ালাইজেশনের জন্য ব্যবহার করা হয়। এই অ্যানোটেশনগুলো ডেটার ফরম্যাটিং, ফিল্ড এক্সক্লুশন, কাস্টম নামকরণ, এবং আরও অনেক ক্ষেত্রে সহায়ক।

Jackson Annotations এর ব্যবহার ডেটা প্রসেসিংয়ের কার্যকারিতা এবং নমনীয়তা বাড়ায়, বিশেষত RESTful API-তে JSON ডেটা হ্যান্ডল করার সময়।


Jackson Annotations-এর মূল সুবিধা

  1. Custom Mapping: JSON প্রপার্টি এবং Java ফিল্ডের মধ্যে কাস্টম নামকরণ বা কাস্টম লজিক প্রয়োগ।
  2. Field Exclusion: নির্দিষ্ট ফিল্ড JSON সিরিয়ালাইজেশন বা ডেসিরিয়ালাইজেশন থেকে বাদ দেওয়া।
  3. Format Customization: ডেট, টাইম এবং অন্যান্য ডেটা ফরম্যাট কাস্টমাইজ করা।
  4. Polymorphic Handling: ইনহেরিটেড ক্লাসের ক্ষেত্রে সঠিক ডেটা টাইপ প্রসেস করা।
  5. Non-intrusive: মডেল ক্লাসে সরাসরি লজিক লিখতে না হয়ে Annotation-এর মাধ্যমে নিয়ন্ত্রণ করা।

1. Commonly Used Jackson Annotations

Annotationব্যবহার
@JsonPropertyফিল্ডের জন্য JSON প্রপার্টি নাম কাস্টমাইজ করা।
@JsonIgnoreনির্দিষ্ট ফিল্ড JSON সিরিয়ালাইজ বা ডেসিরিয়ালাইজ থেকে বাদ দেওয়া।
@JsonIncludeNull বা ডিফল্ট মানের ফিল্ড JSON থেকে বাদ দেওয়া।
@JsonFormatডেট এবং টাইম ফরম্যাট কাস্টমাইজ করা।
@JsonCreatorডেসিরিয়ালাইজেশনের সময় কাস্টম কনস্ট্রাক্টর বা মেথড ব্যবহার করা।
@JsonValueএকটি অবজেক্ট JSON স্ট্রিং বা ভ্যালু হিসাবে সিরিয়ালাইজ করা।
@JsonIgnorePropertiesএকাধিক প্রোপার্টি JSON প্রসেসিং থেকে বাদ দেওয়া।
@JsonAnyGetterডায়নামিক কী-ভ্যালু পেয়ার JSON-এ সিরিয়ালাইজ করা।
@JsonAnySetterডায়নামিক কী-ভ্যালু পেয়ার JSON থেকে ডেসিরিয়ালাইজ করা।
@JsonAutoDetectJSON সিরিয়ালাইজেশনের জন্য ফিল্ড, সেটার বা গেটারের দৃশ্যমানতা নিয়ন্ত্রণ।

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
Content added By
Promotion

Are you sure to start over?

Loading...