Java Technologies @JsonDeserialize এবং @JsonSerialize এর ধারণা গাইড ও নোট

328

Jackson এর @JsonDeserialize এবং @JsonSerialize অ্যানোটেশনগুলি Custom Serialization এবং Custom Deserialization এর জন্য ব্যবহৃত হয়। যখন আপনি কোনো কাস্টম লজিক বা বিশেষ ফরম্যাটের জন্য JSON Serialization বা Deserialization করতে চান, তখন এই অ্যানোটেশনগুলি ব্যবহার করা হয়।


@JsonSerialize Annotation

  • @JsonSerialize অ্যানোটেশনটি Jackson-এর মাধ্যমে একটি Java Object থেকে JSON-এ রূপান্তর করার সময় কাস্টম Serializer ব্যবহার করতে ব্যবহৃত হয়।
  • এটি নির্দিষ্ট মেথড বা ক্লাসের জন্য কাস্টম Serialization প্রক্রিয়া নির্ধারণ করতে সাহায্য করে।

ব্যবহার:

  1. Custom Serializer তৈরি করা।
  2. @JsonSerialize ব্যবহার করে সেই Custom Serializer নির্দিষ্ট ফিল্ড বা ক্লাসে প্রয়োগ করা।

@JsonDeserialize Annotation

  • @JsonDeserialize অ্যানোটেশনটি Jackson-এর মাধ্যমে JSON থেকে Java Object-এ রূপান্তর করার সময় কাস্টম Deserializer ব্যবহার করতে ব্যবহৃত হয়।
  • এটি নির্দিষ্ট মেথড বা ক্লাসের জন্য কাস্টম Deserialization প্রক্রিয়া নির্ধারণ করতে সাহায্য করে।

ব্যবহার:

  1. Custom Deserializer তৈরি করা।
  2. @JsonDeserialize ব্যবহার করে সেই Custom Deserializer নির্দিষ্ট ফিল্ড বা ক্লাসে প্রয়োগ করা।

Custom Serializer এবং Deserializer তৈরি করা

১. Custom Serializer Example:

যদি আমাদের একটি Date অবজেক্ট থাকে, এবং আমরা চাই JSON-এ এটি "yyyy-MM-dd" ফরম্যাটে রূপান্তরিত হোক, তবে আমরা একটি কাস্টম Serializer ব্যবহার করতে পারি।

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 {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = sdf.format(value);
        gen.writeString(formattedDate);
    }
}
@JsonSerialize ব্যবহার:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

public class Event {
    private String name;

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

    // Constructors, Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;

public class JsonSerializeExample {
    public static void main(String[] args) throws Exception {
        Event event = new Event("Meeting", new Date());
        
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(event);

        System.out.println(json);
    }
}
JSON Output:
{
  "name": "Meeting",
  "eventDate": "2024-12-21"
}
  • এখানে, CustomDateSerializer ব্যবহার করে Date ফিল্ডটি "yyyy-MM-dd" ফরম্যাটে JSON-এ রূপান্তরিত হয়েছে।

২. Custom Deserializer Example:

এখন, যদি আমরা JSON-এ একটি তারিখের স্ট্রিং (যেমন: "2024-12-21") গ্রহণ করতে চাই এবং সেটি Date অবজেক্টে রূপান্তর করতে চাই, তাহলে আমরা একটি কাস্টম Deserializer তৈরি করব।

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 dateStr = p.getText();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            return sdf.parse(dateStr);
        } catch (Exception e) {
            throw new IOException("Invalid date format");
        }
    }
}
@JsonDeserialize ব্যবহার:
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

public class Event {
    private String name;

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

    // Constructors, Getters and Setters
}
Deserialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonDeserializeExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"name\":\"Meeting\", \"eventDate\":\"2024-12-21\"}";
        
        ObjectMapper mapper = new ObjectMapper();
        Event event = mapper.readValue(json, Event.class);

        System.out.println("Event Name: " + event.getName());
        System.out.println("Event Date: " + event.getEventDate());
    }
}
Output:
Event Name: Meeting
Event Date: Sun Dec 21 00:00:00 IST 2024
  • এখানে, CustomDateDeserializer ব্যবহার করে JSON তারিখ স্ট্রিংটি Date অবজেক্টে রূপান্তরিত হয়েছে।

@JsonSerialize এবং @JsonDeserialize এর সুবিধা

  1. Custom Serialization এবং Deserialization:
    • আপনি যখন JSON ফরম্যাট কাস্টমাইজ করতে চান (যেমন: তারিখ, সংখ্যা, বা কোনো কাস্টম লজিক), তখন এই অ্যানোটেশন ব্যবহার করতে পারেন।
  2. Complex Types:
    • জটিল ডেটা টাইপের জন্য, যেমন Custom Objects বা Nested Structures, কাস্টম Serialization/Deserialization লজিক প্রয়োগ করতে পারা যায়।
  3. Data Validation:
    • Custom Deserializer ব্যবহার করে ইনপুট ডেটার বৈধতা যাচাই করা যায় এবং যেকোনো ত্রুটি মোকাবেলা করা সম্ভব।
  4. Flexible Data Mapping:
    • ডেটা মডেলগুলোর মধ্যে Mismatch (ফিল্ড নামের অমিল) থাকলে @JsonSerialize এবং @JsonDeserialize ব্যবহার করে সেগুলোর মানচিত্র তৈরির জন্য কাস্টম লজিক প্রয়োগ করা সম্ভব।

@JsonSerialize এবং @JsonDeserialize এর সীমাবদ্ধতা

  1. Complexity:
    • কাস্টম Serializer এবং Deserializer তৈরি করা কিছুটা জটিল হতে পারে, বিশেষত বড় ডেটা মডেল এবং ফিল্ডের জন্য।
  2. Performance Impact:
    • Custom Serialization এবং Deserialization কিছুটা অতিরিক্ত প্রসেসিং করতে পারে, যা পারফরম্যান্সে প্রভাব ফেলতে পারে, বিশেষত বড় ডেটা সেটের ক্ষেত্রে।
  3. Maintenance:
    • একাধিক কাস্টম Serializer এবং Deserializer ব্যবহারের ফলে কোডের রক্ষণাবেক্ষণ কঠিন হতে পারে, বিশেষত যখন অনেক গুলি Custom Mapping প্রয়োগ করা হয়।

  • @JsonSerialize এবং @JsonDeserialize Jackson-এর শক্তিশালী টুলস যা আপনাকে JSON-এ কাস্টম Serialization এবং Deserialization লজিক প্রয়োগ করতে দেয়।
  • Custom Serializer এবং Deserializer ব্যবহার করে আপনি JSON ডেটা ফরম্যাটিং কাস্টমাইজ করতে পারবেন এবং জটিল ডেটা মডেলগুলোর জন্য কার্যকর Data Mapping তৈরি করতে পারবেন।
Content added By
Promotion

Are you sure to start over?

Loading...