LocalDate এবং LocalDateTime এর জন্য Adapter ব্যবহার করা

Date এবং Time Object হ্যান্ডল করা - জিসন (Gson) - Java Technologies

379

Gson লাইব্রেরি দিয়ে LocalDate এবং LocalDateTime (Java 8 থেকে সাপোর্ট করা টাইপ) কে JSON-এ কনভার্ট বা JSON থেকে Java অবজেক্টে রূপান্তর করার জন্য কাস্টম Adapter ব্যবহার করতে হয়। কারণ Gson ডিফল্টভাবে LocalDate বা LocalDateTime টাইপ বুঝতে পারে না।

এখানে, আমরা LocalDate এবং LocalDateTime এর জন্য কাস্টম TypeAdapter তৈরি করে Gson এ ব্যবহার করব।

LocalDate এবং LocalDateTime-এর জন্য Gson Adapter তৈরি করা

1. LocalDate Adapter:

LocalDate একটি শুধুমাত্র তারিখ ধারণ করে (যেমন yyyy-MM-dd), তাই এই ধরনের তারিখকে JSON-এ কনভার্ট করার জন্য কাস্টম TypeAdapter তৈরি করতে হবে।

import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

class LocalDateAdapter implements JsonSerializer<LocalDate>, JsonDeserializer<LocalDate> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;

    @Override
    public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.format(formatter)); // LocalDate কে String-এ রূপান্তর
    }

    @Override
    public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return LocalDate.parse(json.getAsString(), formatter); // String থেকে LocalDate-এ রূপান্তর
    }
}

2. LocalDateTime Adapter:

LocalDateTime একটি তারিখ ও সময় সংক্রান্ত ক্লাস, যেটি yyyy-MM-ddTHH:mm:ss ফরম্যাটে থাকে। এই জন্যও কাস্টম Adapter তৈরি করতে হবে।

import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

class LocalDateTimeAdapter implements JsonSerializer<LocalDateTime>, JsonDeserializer<LocalDateTime> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

    @Override
    public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
        return new JsonPrimitive(src.format(formatter)); // LocalDateTime কে String-এ রূপান্তর
    }

    @Override
    public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        return LocalDateTime.parse(json.getAsString(), formatter); // String থেকে LocalDateTime-এ রূপান্তর
    }
}

3. Gson-এ Adapter রেজিস্টার করা:

এখন আমরা এই দুটি কাস্টম Adapter ব্যবহার করে Gson অবজেক্ট তৈরি করব এবং এই LocalDate এবং LocalDateTime টাইপকে সঠিকভাবে JSON-এ কনভার্ট এবং JSON থেকে Java অবজেক্টে রূপান্তর করব।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
import java.time.LocalDateTime;

class Person {
    String name;
    LocalDate birthDate;
    LocalDateTime lastLogin;

    public Person(String name, LocalDate birthDate, LocalDateTime lastLogin) {
        this.name = name;
        this.birthDate = birthDate;
        this.lastLogin = lastLogin;
    }
}

public class Main {
    public static void main(String[] args) {
        // GsonBuilder দিয়ে Gson তৈরি
        Gson gson = new GsonBuilder()
                        .registerTypeAdapter(LocalDate.class, new LocalDateAdapter()) // LocalDate Adapter
                        .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter()) // LocalDateTime Adapter
                        .create();

        // Person অবজেক্ট তৈরি
        Person person = new Person("John", LocalDate.of(1990, 5, 15), LocalDateTime.now());

        // Person অবজেক্টকে JSON-এ রূপান্তর
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Person অবজেক্টে রূপান্তর
        Person deserializedPerson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + deserializedPerson.name + ", " 
                           + deserializedPerson.birthDate + ", " + deserializedPerson.lastLogin);
    }
}

বিস্তারিত ব্যাখ্যা:

  1. LocalDateAdapter এবং LocalDateTimeAdapter: এই ক্লাস দুটি কাস্টম Gson TypeAdapter যা LocalDate এবং LocalDateTime টাইপকে JSON-এ কনভার্ট এবং JSON থেকে Java অবজেক্টে রূপান্তর করার জন্য ব্যবহৃত হয়।
    • serialize() মেথড JSON অবজেক্টে রূপান্তর করে।
    • deserialize() মেথড JSON অবজেক্ট থেকে Java অবজেক্টে রূপান্তর করে।
  2. GsonBuilder: GsonBuilder ব্যবহার করে Gson অবজেক্ট তৈরি করা হয়, যেখানে registerTypeAdapter() মেথড ব্যবহার করে কাস্টম TypeAdapter রেজিস্টার করা হয়েছে।
  3. Person অবজেক্ট: Person ক্লাসে LocalDate এবং LocalDateTime টাইপের ফিল্ড রয়েছে, যেগুলো JSON-এ কনভার্ট ও ডেসিরিয়ালাইজ করার জন্য কাস্টম Adapter ব্যবহার করা হয়েছে।

আউটপুট:

Serialized JSON: {"name":"John","birthDate":"1990-05-15","lastLogin":"2024-12-19T16:05:17.939558"}
Deserialized Person: John, 1990-05-15, 2024-12-19T16:05:17.939558

এখানে:

  • birthDate এবং lastLogin এর মান JSON স্ট্রিংয়ে সঠিকভাবে yyyy-MM-dd এবং yyyy-MM-dd'T'HH:mm:ss ফরম্যাটে রূপান্তরিত হয়েছে।
  • JSON থেকে আবার LocalDate এবং LocalDateTime অবজেক্টে রূপান্তর করা হয়েছে।

সংক্ষেপে:

  • Gson দিয়ে LocalDate এবং LocalDateTime টাইপকে JSON-এ কনভার্ট এবং JSON থেকে Java অবজেক্টে রূপান্তর করার জন্য কাস্টম TypeAdapter ব্যবহার করা হয়।
  • এই TypeAdapter গুলো তৈরি করা হয় JsonSerializer এবং JsonDeserializer ইন্টারফেস ব্যবহার করে।
  • GsonBuilder ব্যবহার করে এই কাস্টম Adapter গুলো রেজিস্টার করা হয়।

এভাবে আপনি Gson এর মাধ্যমে LocalDate এবং LocalDateTime টাইপের ডেটা JSON এর সাথে ব্যবহার করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...