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);
}
}
বিস্তারিত ব্যাখ্যা:
- LocalDateAdapter এবং LocalDateTimeAdapter: এই ক্লাস দুটি কাস্টম Gson TypeAdapter যা
LocalDateএবংLocalDateTimeটাইপকে JSON-এ কনভার্ট এবং JSON থেকে Java অবজেক্টে রূপান্তর করার জন্য ব্যবহৃত হয়।serialize()মেথড JSON অবজেক্টে রূপান্তর করে।deserialize()মেথড JSON অবজেক্ট থেকে Java অবজেক্টে রূপান্তর করে।
- GsonBuilder:
GsonBuilderব্যবহার করে Gson অবজেক্ট তৈরি করা হয়, যেখানেregisterTypeAdapter()মেথড ব্যবহার করে কাস্টম TypeAdapter রেজিস্টার করা হয়েছে। - 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 এর সাথে ব্যবহার করতে পারেন।
Read more