Java 14 এর পরে record টাইপ introduced হয়েছে, যা একটি নতুন ধরনের ক্লাস যা ডেটা স্টোর করার জন্য ব্যবহৃত হয়, এবং এটি অনুবর্তী getter, setter, equals(), hashCode(), এবং toString() মেথডগুলি তৈরি করে। record টাইপকে Gson এর সাথে ব্যবহার করা একটু ভিন্ন হতে পারে কারণ Gson সাধারণভাবে একটি POJO (Plain Old Java Object) হিসেবে কাজ করে, তবে record টাইপ JSON সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের জন্যও সমর্থিত।
যেহেতু record এ getter, setter মেথডগুলি নিজেই অটোমেটিক্যালি তৈরি হয়, Gson স্বাভাবিকভাবেই এটি পরিচালনা করতে সক্ষম। তবে, কাস্টম ফরম্যাট এবং অন্যান্য বৈশিষ্ট্য সহ JSON ম্যানিপুলেশন করার জন্য Gson এবং Java record এর সঠিক ইন্টিগ্রেশন প্রয়োজন।
উদাহরণ: Gson এবং Java record Integration
1. Java Record টাইপ
Java Record ক্লাস সাধারণভাবে ডেটা ধারণ করার জন্য ব্যবহৃত হয়। ধরুন, একটি Person রেকর্ড আছে:
public record Person(String name, int age) {}
এই রেকর্ড ক্লাসটি দুটি ফিল্ড name এবং age ধারণ করবে, এবং এর সাথে স্বয়ংক্রিয়ভাবে getter এবং toString() মেথড তৈরি হবে।
2. Gson Integration:
Gson এর সাথে Java record ইন্টিগ্রেট করতে, আপনি Gson এর সাধারণ পদ্ধতি ব্যবহার করতে পারেন। Gson record টাইপকে হ্যান্ডল করতে পারে কারণ এটি ঐতিহ্যগত POJO টাইপের মতো একইভাবে কাজ করে।
উদাহরণ কোড:
import com.google.gson.Gson;
public record Person(String name, int age) {
// No need for explicit constructors, getters, or setters, they are auto-generated
}
public class Main {
public static void main(String[] args) {
// Gson ইনস্ট্যান্স তৈরি
Gson gson = new Gson();
// একটি Person রেকর্ড অবজেক্ট তৈরি
Person person = new Person("John", 30);
// 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);
}
}
আউটপুট:
Serialized JSON: {"name":"John","age":30}
Deserialized Person: Person[name=John, age=30]
ব্যাখ্যা:
- Java Record ক্লাস:
Personনামের রেকর্ডেnameএবংageফিল্ড রয়েছে। - Gson সিরিয়ালাইজেশন:
gson.toJson()ব্যবহার করেPersonঅবজেক্টটি JSON ফরম্যাটে সিরিয়ালাইজ করা হয়েছে। - Gson ডেসিরিয়ালাইজেশন:
gson.fromJson()ব্যবহার করে JSON থেকে আবারPersonঅবজেক্টে রূপান্তর করা হয়েছে।
3. কাস্টম record সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন:
যদি আপনি record টাইপের জন্য কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন চান, তবে আপনি কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহার করতে পারেন।
উদাহরণ: কাস্টম সিরিয়ালাইজেশন
ধরা যাক, আপনি Person রেকর্ডের age ফিল্ডকে age in years ফরম্যাটে JSON এ সিরিয়ালাইজ করতে চান।
import com.google.gson.*;
import java.lang.reflect.Type;
public record Person(String name, int age) {}
class PersonSerializer implements JsonSerializer<Person> {
@Override
public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", person.name());
jsonObject.addProperty("age_in_years", person.age());
return jsonObject;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
// Gson ইনস্ট্যান্স তৈরি কাস্টম সিরিয়ালাইজার সহ
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonSerializer())
.create();
// JSON সিরিয়ালাইজ করা
String json = gson.toJson(person);
System.out.println("Serialized JSON with custom serializer: " + json);
}
}
আউটপুট:
Serialized JSON with custom serializer: {"name":"John","age_in_years":30}
কাস্টম ডেসিরিয়ালাইজেশন:
class PersonDeserializer implements JsonDeserializer<Person> {
@Override
public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age_in_years").getAsInt(); // Custom field name
return new Person(name, age);
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"John\",\"age_in_years\":30}";
// Gson ইনস্ট্যান্স তৈরি কাস্টম ডেসিরিয়ালাইজার সহ
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonDeserializer())
.create();
// JSON থেকে Person অবজেক্ট ডেসিরিয়ালাইজ করা
Person person = gson.fromJson(json, Person.class);
System.out.println("Deserialized Person with custom deserializer: " + person);
}
}
আউটপুট:
Deserialized Person with custom deserializer: Person[name=John, age=30]
4. মনে রাখার বিষয়:
- Records সাধারণভাবে immutable হয়, অর্থাৎ
nameএবংageফিল্ডগুলি একবার তৈরি হলে পরিবর্তন করা যাবে না। - Gson
recordটাইপের জন্য স্বাভাবিকভাবে কাজ করবে, কারণrecordফিল্ডগুলির জন্য স্বয়ংক্রিয়ভাবেgetterমেথড তৈরি করা হয়। - কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন ব্যবহার করে আপনি JSON ফরম্যাট এবং ডেটার কাঠামো কাস্টমাইজ করতে পারেন।
সারাংশ:
- Java
recordক্লাসের সাথে Gson-এর ইন্টিগ্রেশন খুবই সহজ এবং এটি সাধারণভাবে কাজ করে যেমনPOJOক্লাসের জন্য। - কাস্টম সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার ব্যবহার করে আপনি
recordটাইপের JSON ফরম্যাট কাস্টমাইজ করতে পারেন।
Read more