Practical উদাহরণ সহ Custom Annotations এর ব্যবহার

Custom Annotations তৈরি - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

290

Jackson আপনাকে কাস্টম Annotations তৈরি করার এবং তার মাধ্যমে Serialization এবং Deserialization কাস্টমাইজ করার সুযোগ দেয়। Jackson এর ডিফল্ট অ্যানোটেশনগুলো যেমন @JsonProperty, @JsonIgnore ইত্যাদি দিয়ে অনেক কাজ করা যায়, তবে যখন আপনার বিশেষ লজিক বা প্রয়োজনে কাস্টম অ্যানোটেশন তৈরি করতে হয়, তখন আপনাকে @JsonSerialize এবং @JsonDeserialize অ্যানোটেশনগুলো ব্যবহার করতে হবে।

এছাড়া, আপনি নিজের কাস্টম অ্যানোটেশনও তৈরি করতে পারেন যেগুলো নির্দিষ্ট Serializer বা Deserializer প্রয়োগ করবে।


Custom Annotation তৈরি করার প্রক্রিয়া

Jackson-এ Custom Annotation তৈরি করার জন্য আপনাকে কয়েকটি পদক্ষেপ অনুসরণ করতে হবে:

  1. Custom Annotation তৈরি করুন
  2. Custom Serializer বা Deserializer তৈরি করুন
  3. Custom Serializer বা Deserializer কে @JsonSerialize বা @JsonDeserialize অ্যানোটেশন দিয়ে প্রয়োগ করুন।

প্র্যাকটিক্যাল উদাহরণ: Custom Date Formatter

আমরা একটি কাস্টম অ্যানোটেশন তৈরি করব যা Date টাইপের ফিল্ডের জন্য একটি কাস্টম ফরম্যাট প্রয়োগ করবে।

Step 1: Custom Annotation তৈরি করুন

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@JacksonAnnotationsInside
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@JsonSerialize(using = CustomDateSerializer.class)  // Serializer প্রয়োগ
public @interface CustomDateFormat {
    String pattern() default "yyyy-MM-dd";  // Default pattern
}

এখানে আমরা @CustomDateFormat অ্যানোটেশন তৈরি করেছি, যা CustomDateSerializer এর মাধ্যমে Date ফিল্ডের জন্য কাস্টম ফরম্যাট প্রয়োগ করবে।


Step 2: Custom Serializer তৈরি করুন

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomDateSerializer extends JsonSerializer<Date> {
    private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        String formattedDate = formatter.format(value);
        gen.writeString(formattedDate);  // JSON আউটপুটে কাস্টম ফরম্যাটে তারিখ লেখার জন্য
    }
}

এই CustomDateSerializer কাস্টম Date ফরম্যাট তৈরি করবে এবং JSON আউটপুটে সেই ফরম্যাটে তারিখ সিরিয়ালাইজ করবে।


Step 3: Custom Annotation প্রয়োগ করুন

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;

public class CustomAnnotationExample {
    public static void main(String[] args) throws Exception {
        Employee employee = new Employee("Rahim", new Date());

        // ObjectMapper তৈরি
        ObjectMapper mapper = new ObjectMapper();

        // Employee অবজেক্ট JSON এ সিরিয়ালাইজ করা
        String json = mapper.writeValueAsString(employee);

        // JSON আউটপুট
        System.out.println(json);
    }
}

class Employee {
    private String name;

    @CustomDateFormat(pattern = "yyyy-MM-dd")  // Custom Annotation প্রয়োগ
    private Date hireDate;

    public Employee(String name, Date hireDate) {
        this.name = name;
        this.hireDate = hireDate;
    }

    // Getters and Setters
}

এখানে @CustomDateFormat অ্যানোটেশন দিয়ে hireDate ফিল্ডে কাস্টম তারিখ ফরম্যাট প্রয়োগ করা হয়েছে।


Output:

{
  "name": "Rahim",
  "hireDate": "2024-12-21"
}

এখানে hireDate ফিল্ডটি কাস্টম তারিখ ফরম্যাট yyyy-MM-dd অনুযায়ী সিরিয়ালাইজ হয়েছে।


আরেকটি উদাহরণ: Custom Deserializer

Jackson-এ Custom Deserializer ব্যবহার করার জন্য একইভাবে @JsonDeserialize অ্যানোটেশন ব্যবহার করা হয়। নিচে একটি উদাহরণ দেওয়া হল যেখানে আমরা একটি String টাইপ ফিল্ডের জন্য কাস্টম Deserializer ব্যবহার করব।

Step 1: Custom Deserializer তৈরি করুন

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;

public class CustomStringDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String value = p.getText().toUpperCase();  // String value কে uppercase করতে
        return value;
    }
}

এখানে CustomStringDeserializer একটি String ফিল্ডের জন্য JSON ডেটাকে uppercase করে ডেসিরিয়ালাইজ করবে।

Step 2: @JsonDeserialize ব্যবহার করুন

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomDeserializerExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"rahim\"}";

        // ObjectMapper তৈরি
        ObjectMapper mapper = new ObjectMapper();

        // JSON থেকে Employee অবজেক্ট তৈরি
        Employee employee = mapper.readValue(json, Employee.class);

        // Employee নাম uppercase হয়ে এসেছে
        System.out.println("Name: " + employee.getName());
    }
}

class Employee {
    @JsonDeserialize(using = CustomStringDeserializer.class)  // Custom Deserializer প্রয়োগ
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Output:

Name: RAHIM

এখানে name ফিল্ডের জন্য কাস্টম ডেসিরিয়ালাইজার CustomStringDeserializer ব্যবহৃত হয়েছে, যা JSON ডেটার name ফিল্ডটিকে uppercase করে ডেসিরিয়ালাইজ করেছে।


  1. Custom Annotations তৈরি করে Jackson-এ ডেটা কাস্টমাইজ করা যায়।
  2. @JsonSerialize এবং @JsonDeserialize অ্যানোটেশন ব্যবহার করে কাস্টম Serializer এবং Deserializer তৈরি করা যায়।
  3. Dynamic Filtering এবং Custom Processing এর জন্য কাস্টম অ্যানোটেশন খুবই উপকারী, যেখানে আপনি ফিল্ডের কাস্টম ফরম্যাট বা ডেটার প্রক্রিয়া পরিবর্তন করতে পারেন।

Jackson এ Custom Annotations ব্যবহার করে আপনার JSON প্রক্রিয়াকরণ আরো নমনীয় এবং কার্যকর করতে পারেন।

Content added || updated By
Promotion

Are you sure to start over?

Loading...