Gson TypeAdapter হলো Gson লাইব্রেরির একটি শক্তিশালী ফিচার, যা কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রক্রিয়া কাস্টমাইজ করতে সাহায্য করে। এটি Gson এর ডিফল্ট আচরণের বাইরে গিয়ে, আপনি যখন বিশেষ ধরনের JSON স্ট্রাকচার বা Java অবজেক্টের সাথে কাজ করতে চান, তখন TypeAdapter একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
Gson TypeAdapter কি?
TypeAdapter একটি কাস্টম ক্লাস যা আপনাকে কাস্টম সিরিয়ালাইজেশন (অর্থাৎ, Java অবজেক্টকে JSON এ রূপান্তর) এবং ডেসিরিয়ালাইজেশন (JSON কে Java অবজেক্টে রূপান্তর) কনফিগার করতে দেয়। Gson এর ডিফল্ট behavior অনেক ক্ষেত্রেই কাজ করে, তবে কিছু সময় বিশেষ রূপান্তরের প্রক্রিয়া প্রয়োজন হয়, এবং TypeAdapter সেসকল কাস্টম প্রক্রিয়া করতে ব্যবহৃত হয়।
TypeAdapter ইন্টারফেসটি দুইটি প্রধান মেথড প্রদান করে:
write(JsonWriter out, T value)- এই মেথডটি Java অবজেক্টকে JSON এ রূপান্তর করতে ব্যবহৃত হয়।read(JsonReader in)- এই মেথডটি JSON ডাটা থেকে Java অবজেক্টে রূপান্তর করতে ব্যবহৃত হয়।
কেন TypeAdapter প্রয়োজন?
- কাস্টম সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন: কিছু সময় আপনি JSON ফরম্যাটে ডেটা লেখার বা পড়ার জন্য নির্দিষ্ট কাস্টম লজিক প্রয়োগ করতে চাইতে পারেন। উদাহরণস্বরূপ, যদি আপনি
Dateঅবজেক্টে নির্দিষ্ট ফরম্যাটে তারিখ রূপান্তর করতে চান, তবে আপনিTypeAdapterব্যবহার করতে পারেন। - অস্বাভাবিক ডাটা ফরম্যাটের জন্য: আপনি যদি এমন কোনো ডাটা ফরম্যাটের সাথে কাজ করছেন যা Gson এর ডিফল্ট মডেল দ্বারা সমর্থিত না হয়, তবে TypeAdapter দিয়ে আপনি কাস্টম ফরম্যাটে JSON পার্স এবং রাইট করতে পারবেন।
- অবজেক্টের বিশেষ ক্ষেত্রের সাথে কাজ: আপনি যখন কোনো অবজেক্টের বিশেষ ক্ষেত্রের জন্য JSON পদ্ধতির পরিবর্তন করতে চান (যেমন, বিশেষ ধরনের মান বা ফিল্ডের জন্য নির্দিষ্ট ফরম্যাট প্রয়োগ), তখন TypeAdapter প্রয়োজন হতে পারে।
উদাহরণ:
ধরা যাক, আপনার একটি Person ক্লাস আছে যেখানে Date ফিল্ড রয়েছে এবং আপনি চাইছেন এই Date ফিল্ডটি কাস্টম ফরম্যাটে JSON-এ রূপান্তরিত হোক।
Step 1: কাস্টম TypeAdapter তৈরি করা
import com.google.gson.*;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
class Person {
String name;
Date birthDate;
public Person(String name, Date birthDate) {
this.name = name;
this.birthDate = birthDate;
}
}
class PersonTypeAdapter extends TypeAdapter<Person> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void write(JsonWriter out, Person person) throws IOException {
out.beginObject();
out.name("name").value(person.name);
out.name("birthDate").value(dateFormat.format(person.birthDate));
out.endObject();
}
@Override
public Person read(JsonReader in) throws IOException {
in.beginObject();
String name = null;
Date birthDate = null;
while (in.hasNext()) {
String currentName = in.nextName();
if (currentName.equals("name")) {
name = in.nextString();
} else if (currentName.equals("birthDate")) {
birthDate = dateFormat.parse(in.nextString());
}
}
in.endObject();
return new Person(name, birthDate);
}
}
Step 2: GsonBuilder এ TypeAdapter রেজিস্টার করা
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;
public class GsonTypeAdapterExample {
public static void main(String[] args) throws Exception {
// Person অবজেক্ট তৈরি করা
Person person = new Person("John Doe", new SimpleDateFormat("yyyy-MM-dd").parse("1990-05-15"));
// GsonBuilder দিয়ে কাস্টম TypeAdapter রেজিস্টার করা
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonTypeAdapter())
.create();
// 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);
}
}
আউটপুট:
Serialized JSON: {"name":"John Doe","birthDate":"1990-05-15"}
Deserialized Person: John Doe, Mon May 15 00:00:00 IST 1990
ব্যাখ্যা:
PersonTypeAdapterকাস্টম TypeAdapter, যেখানেwriteমেথডটিPersonঅবজেক্টেরbirthDateফিল্ডকে নির্দিষ্ট ফরম্যাটে JSON এ রূপান্তরিত করে এবংreadমেথডটি JSON থেকে সেই ফরম্যাটে তারিখটি রূপান্তর করে।GsonBuilder().registerTypeAdapter()ব্যবহার করে Gson এ কাস্টম TypeAdapter রেজিস্টার করা হয়েছে, যাতেPersonঅবজেক্টে কাস্টম রূপান্তর করা যায়।
TypeAdapter এর আরও কিছু ব্যবহার:
- কাস্টম ফিল্ড নাম: যদি আপনি JSON এর ফিল্ড নাম পরিবর্তন করতে চান (যেমন
snake_caseথেকেcamelCaseএ), তাহলে TypeAdapter দিয়ে তা কাস্টমাইজ করা যায়। - কাস্টম ফিল্ডের ডেটা রূপান্তর: যদি কোনো ফিল্ডের ডেটার জন্য আপনি একটি নির্দিষ্ট রূপান্তর চান (যেমন, একটা
BigDecimalফিল্ডকে JSON এStringহিসেবে প্রেরণ করা), TypeAdapter এর মাধ্যমে এটি করা সম্ভব। - নেস্টেড অবজেক্ট: যদি আপনি কোনো নেস্টেড অবজেক্টের JSON রূপান্তর কাস্টমাইজ করতে চান, TypeAdapter ব্যবহার করে সেটা করতে পারবেন।
Gson TypeAdapter একটি খুবই শক্তিশালী টুল, যা আপনাকে কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন প্রয়োগের সুযোগ দেয়। এটি বিশেষভাবে উপকারী যখন:
- ডিফল্ট Gson পার্সিং যথেষ্ট নয়।
- JSON ডাটা বা Java অবজেক্টে কিছু বিশেষ কাস্টম লজিক প্রয়োগ করতে হয়।
- বিশেষ JSON ফরম্যাট বা ডেটা টাইপের জন্য কাস্টম রূপান্তর প্রয়োজন।
TypeAdapter ব্যবহারের মাধ্যমে, আপনি Gson লাইব্রেরির পূর্ণ ক্ষমতা ব্যবহার করে নিজের কাঙ্ক্ষিত JSON আউটপুট বা ইনপুট তৈরি করতে পারেন।
Read more