Custom Jackson Annotations কি এবং কেন ব্যবহার করবেন?

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

293

Jackson একটি শক্তিশালী এবং নমনীয় JSON প্রসেসিং লাইব্রেরি, যা Java অবজেক্টগুলিকে JSON-এ রূপান্তর (Serialization) এবং JSON থেকে Java অবজেক্টে রূপান্তর (Deserialization) করতে ব্যবহৃত হয়। Jackson সরাসরি বেশ কিছু বিল্ট-ইন অ্যানোটেশন যেমন @JsonProperty, @JsonIgnore, @JsonFormat ইত্যাদি প্রদান করে, কিন্তু কখনও কখনও ডেভেলপারদের আরও কাস্টম লজিক বা কার্যকারিতা প্রয়োগ করার জন্য Custom Jackson Annotations তৈরি করতে হয়।

Custom Jackson Annotations ব্যবহার করে আপনি নিজের প্রয়োজন অনুযায়ী JSON ফরম্যাটিং, ক্ষেত্রগুলো সিলেক্টিভভাবে সিরিয়ালাইজ বা ডেসিরিয়ালাইজ এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে পারেন।


Custom Jackson Annotations তৈরি করা কেন প্রয়োজন?

  1. Specific Formatting or Serialization Rules:
    • আপনি যদি JSON ফরম্যাটের জন্য নির্দিষ্ট নিয়ম তৈরি করতে চান যা Jackson এর ডিফল্ট অ্যানোটেশন দ্বারা সমর্থিত নয়, তখন কাস্টম অ্যানোটেশন তৈরি করতে হতে পারে।
  2. Field-Level Customization:
    • কখনও কখনও আপনাকে কিছু private বা protected ফিল্ড JSON-এ সিরিয়ালাইজ করতে বা ডেসিরিয়ালাইজ করতে হতে পারে, যা default visibility rules দ্বারা সাপোর্টেড নয়।
  3. Complex Data Structures:
    • JSON অবজেক্টের মধ্যে অনেক জটিল বা নেস্টেড ডেটা স্ট্রাকচার থাকতে পারে, যা Jackson-এ ম্যানুয়ালি প্রক্রিয়া করার জন্য কাস্টম অ্যানোটেশন প্রয়োজন।
  4. Better Control Over Serialization/Deserialization:
    • কখনও কখনও Jackson এর ডিফল্ট Serialization এবং Deserialization প্রক্রিয়া আপনার চাহিদা মেটায় না। কাস্টম অ্যানোটেশন দ্বারা আপনি এগুলোর আচরণ নিয়ন্ত্রণ করতে পারেন।
  5. Cross-cutting Concerns:
    • কাস্টম অ্যানোটেশন দিয়ে আপনি কিছু সাধারণ কার্যকলাপ করতে পারেন যা বিভিন্ন জায়গায় প্রয়োগ করা হবে (যেমন, ফিল্ড ভ্যালিডেশন, স্পেশাল লজিক প্রযোজ্য করা)।

Custom Jackson Annotations তৈরি করার প্রক্রিয়া

Jackson এর মাধ্যমে Custom Annotations তৈরি করার জন্য আপনাকে Annotation এবং JsonSerializer/ JsonDeserializer ক্লাসের সমন্বয় করতে হবে। নিচে একটি বিস্তারিত উদাহরণ দেখানো হয়েছে।


Custom Jackson Annotation উদাহরণ:

Step 1: Custom Annotation তৈরি করা

ধরা যাক, আমরা একটি কাস্টম অ্যানোটেশন তৈরি করতে চাই, যা একটি নির্দিষ্ট প্রোপার্টি JSON ফিল্ড হিসেবে uppercase (uppercase case) এ সিরিয়ালাইজ করবে।

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)  // Applies to fields only
@Retention(RetentionPolicy.RUNTIME)
public @interface Uppercase {
    // Custom annotation to convert the value to uppercase
}

এখানে, @Uppercase অ্যানোটেশনটি ফিল্ডগুলোর উপর প্রয়োগ করা হবে এবং শুধুমাত্র runtime এ অ্যাক্সেসযোগ্য হবে।

Step 2: Custom Serializer তৈরি করা

এখন আমাদের একটি custom serializer তৈরি করতে হবে, যা Uppercase অ্যানোটেশনটি দেখে ফিল্ডের মান uppercase-এ পরিবর্তন করবে।

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.lang.reflect.Field;

public class UppercaseSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        try {
            // Check if the field has the Uppercase annotation
            Field field = value.getClass().getDeclaredField(gen.getCurrentName());
            if (field.isAnnotationPresent(Uppercase.class)) {
                // Convert the value to uppercase if the Uppercase annotation is present
                String uppercaseValue = value.toString().toUpperCase();
                gen.writeString(uppercaseValue);
            } else {
                // Otherwise, write the value normally
                gen.writeObject(value);
            }
        } catch (NoSuchFieldException e) {
            gen.writeObject(value); // Default handling if field not found
        }
    }
}

Step 3: Custom Annotation ব্যবহার করা

এখন আমরা আমাদের Uppercase অ্যানোটেশনটি ব্যবহার করে একটি ক্লাস তৈরি করবো এবং ওই ফিল্ডগুলো সিরিয়ালাইজ করার সময় কাস্টম লজিক প্রয়োগ করবো।

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class Person {
    
    @Uppercase  // Apply the custom annotation to the name field
    @JsonSerialize(using = UppercaseSerializer.class)
    private String name;

    private int age;

    // Constructors, Getters, and Setters
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Step 4: Object Serialization Example

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomAnnotationExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person("John Doe", 30);
        
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(person);

        // Output the serialized JSON
        System.out.println(jsonString);
    }
}

Output:

{
  "name": "JOHN DOE",
  "age": 30
}

এখানে, name ফিল্ডটি uppercase-এ রূপান্তরিত হয়েছে কারণ আমরা @Uppercase অ্যানোটেশন এবং UppercaseSerializer ব্যবহার করেছি।


Custom Jackson Annotation এর সুবিধা

  1. Custom Validation:
    • আপনি কাস্টম অ্যানোটেশন ব্যবহার করে ফিল্ডের জন্য কাস্টম ভ্যালিডেশন তৈরি করতে পারেন, যেমন ডেটার ফরম্যাট চেক করা বা কাস্টম কন্ডিশন চেক করা।
  2. Cross-cutting Concerns:
    • আপনি অ্যাপ্লিকেশন জুড়ে একই ধরনের কার্যকলাপ করতে কাস্টম অ্যানোটেশন তৈরি করতে পারেন (যেমন, security tokens প্রয়োগ করা, logging বা formatting সমন্বয় করা)।
  3. Code Reusability:
    • কাস্টম অ্যানোটেশন তৈরি করার মাধ্যমে আপনি একাধিক ক্লাস বা ফিল্ডে পুনরায় একই কার্যকলাপ ব্যবহার করতে পারেন, যার ফলে কোডটি আরও পরিষ্কার এবং পুনরায় ব্যবহারযোগ্য হয়।
  4. Serialization Control:
    • Jackson এ কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার তৈরি করে আপনি কীভাবে অবজেক্ট JSON-এ পরিণত হবে বা JSON থেকে অবজেক্টে রূপান্তরিত হবে তা সম্পূর্ণ নিয়ন্ত্রণ করতে পারেন।
  5. Custom Jackson Annotations Jackson-এর শক্তিশালী ফিচার যা আপনাকে JSON প্রক্রিয়াকরণে গভীর নিয়ন্ত্রণ প্রদান করে।
  6. Annotations তৈরি করার মাধ্যমে আপনি কাস্টম Serialization এবং Deserialization লজিক প্রয়োগ করতে পারেন, যা validation, formatting, data conversion, এবং serialization rules এর জন্য উপকারী।
  7. Jackson অ্যানোটেশন ব্যবহার করে আপনার কোডকে আরও কার্যকরী, পুনরাবৃত্তিযোগ্য এবং পরিষ্কার করতে পারবেন।
Content added || updated By
Promotion

Are you sure to start over?

Loading...