Practical উদাহরণ সহ Custom Serializer এবং Deserializer এর ব্যবহার

@JsonDeserialize এবং @JsonSerialize - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

324

Jackson এর Custom Serializer এবং Custom Deserializer ব্যবহার করে আপনি JSON ডেটা কাস্টমাইজ করতে পারেন। এটি বিশেষভাবে কার্যকর যখন আপনি জটিল ডেটা রূপান্তর করতে চান, যেমন তারিখের বিশেষ ফরম্যাট, কাস্টম অবজেক্টস ইত্যাদি।

Custom Serializer:

Jackson Custom Serializer ব্যবহার করে আপনি একটি কাস্টম মেথড তৈরি করতে পারেন যা নির্দিষ্টভাবে JSON আউটপুট তৈরি করবে।

Custom Deserializer:

Jackson Custom Deserializer ব্যবহার করে আপনি JSON থেকে Java অবজেক্টে রূপান্তর করার সময় কাস্টম লজিক প্রয়োগ করতে পারেন।


Custom Serializer এর উদাহরণ

ধরা যাক, আমরা একটি Date অবজেক্টকে একটি কাস্টম ফরম্যাটে JSON-এ রূপান্তর করতে চাই।

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> {
    @Override
    public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // Custom Date format
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = formatter.format(value);
        gen.writeString(formattedDate);
    }
}

Object Class (Using the Custom Serializer):

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

import java.util.Date;

public class Event {
    private String name;

    @JsonSerialize(using = CustomDateSerializer.class)
    private Date eventDate;

    public Event(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

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

    public Date getEventDate() {
        return eventDate;
    }

    public void setEventDate(Date eventDate) {
        this.eventDate = eventDate;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.Date;

public class CustomSerializerExample {
    public static void main(String[] args) throws Exception {
        Event event = new Event("Conference", new Date());

        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(event);

        System.out.println(json);
    }
}
Output:
{
  "name": "Conference",
  "eventDate": "2024-12-21 15:30:00"
}

Custom Deserializer এর উদাহরণ

ধরা যাক, আমরা একটি String থেকে Date অবজেক্টে কাস্টম ডেটা রূপান্তর করতে চাই।

Custom Deserializer তৈরি করা:

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

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomDateDeserializer extends JsonDeserializer<Date> {
    @Override
    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String dateString = p.getText();
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter.parse(dateString);
        } catch (Exception e) {
            throw new IOException("Invalid date format");
        }
    }
}

Object Class (Using the Custom Deserializer):

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

import java.util.Date;

public class Event {
    private String name;

    @JsonDeserialize(using = CustomDateDeserializer.class)
    private Date eventDate;

    public Event(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

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

    public Date getEventDate() {
        return eventDate;
    }

    public void setEventDate(Date eventDate) {
        this.eventDate = eventDate;
    }
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class CustomDeserializerExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"Conference\",\"eventDate\":\"2024-12-21 15:30:00\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        Event event = objectMapper.readValue(json, Event.class);

        System.out.println("Event Name: " + event.getName());
        System.out.println("Event Date: " + event.getEventDate());
    }
}
Output:
Event Name: Conference
Event Date: Sat Dec 21 15:30:00 IST 2024

@JsonSerialize এবং @JsonDeserialize ব্যবহার:

  1. @JsonSerialize(using = CustomDateSerializer.class):
    • CustomDateSerializer ব্যবহার করে eventDate ফিল্ডকে কাস্টম ডেটা ফরম্যাটে JSON-এ রূপান্তর করা হয়।
  2. @JsonDeserialize(using = CustomDateDeserializer.class):
    • CustomDateDeserializer ব্যবহার করে JSON থেকে eventDate ফিল্ডের মানকে Date অবজেক্টে রূপান্তর করা হয়।

Custom Serializer এবং Deserializer এর সুবিধা:

  1. Custom Data Format:
    • ডেটা ফরম্যাট বা কাস্টম লজিক প্রয়োগের মাধ্যমে JSON ডেটা কাস্টমাইজ করা যায়।
  2. Complex Data Handling:
    • জটিল ডেটা (যেমন, ডেটা টাইপ, ডেটাবেজ রূপান্তর) কাস্টম Serializer এবং Deserializer দ্বারা সঠিকভাবে পরিচালনা করা যায়।
  3. Backward Compatibility:
    • পুরোনো ফরম্যাটে JSON ডেটা পরিচালনা করার জন্য কাস্টম Serializer/Deserializer ব্যবহার করা যেতে পারে।
  4. Better Error Handling:
    • কাস্টম ডেটা প্রক্রিয়া ও ভুল ডেটা ফরম্যাটে ভালোভাবে হ্যান্ডেল করা সম্ভব।

  • Jackson এর Custom Serializer এবং Custom Deserializer এর মাধ্যমে আপনি JSON Serialization এবং Deserialization কাস্টমাইজ করতে পারবেন।
  • এটি বিশেষভাবে দরকারী যখন JSON ফরম্যাটে পরিবর্তন, সঠিক টাইপ রূপান্তর, বা অন্য ধরনের কাস্টম প্রক্রিয়া করতে হয়।
  • @JsonSerialize এবং @JsonDeserialize অ্যানোটেশন ব্যবহার করে সহজেই কাস্টম Serializer এবং Deserializer প্রয়োগ করা যায়।
Content added By
Promotion

Are you sure to start over?

Loading...