Gson লাইব্রেরিতে @Expose এবং @SerializedName দুটি গুরুত্বপূর্ণ অ্যানোটেশন রয়েছে, যা JSON পার্সিং এবং সিরিয়ালাইজেশনে সাহায্য করে। এগুলো দিয়ে আপনি কীভাবে একটি Java অবজেক্টের নির্দিষ্ট ফিল্ডগুলিকে কাস্টমাইজ করতে পারেন তা বুঝতে সহায়তা করবে।
@Expose:
@Expose অ্যানোটেশনটি ব্যবহার করা হয় যাতে আপনি নির্দিষ্ট Java অবজেক্টের ফিল্ডগুলোকে সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করতে চান কিনা সেটি কাস্টমাইজ করতে পারেন।
ব্যবহার:
@Expose: যখন আপনি একটি ফিল্ডের জন্য@Exposeঅ্যানোটেশন ব্যবহার করেন, তখন সেই ফিল্ডটি Gson দিয়ে সিরিয়ালাইজ বা ডেসিরিয়ালাইজ হবে।@Expose(serialize = false, deserialize = false): আপনি যদি চান যে একটি ফিল্ড সিরিয়ালাইজ বা ডেসিরিয়ালাইজ না হোক, তাহলে আপনি এই অপশন ব্যবহার করতে পারেন।
উদাহরণ:
import com.google.gson.annotations.Expose;
public class Person {
@Expose
String name;
@Expose(serialize = false)
int age;
// কন্সট্রাকটর
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Gson সেটআপে @Expose ব্যবহার:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class Main {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
// GsonBuilder ব্যবহার করে @Expose যুক্ত ফিল্ড সিরিয়ালাইজ করুন
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation() // শুধুমাত্র @Expose দিয়ে চিহ্নিত ফিল্ড সিরিয়ালাইজ করবে
.create();
String json = gson.toJson(person);
System.out.println(json);
}
}
আউটপুট:
{"name":"John Doe"}
এখানে age ফিল্ডটি @Expose(serialize = false) অ্যানোটেশনের কারণে JSON-এ সিরিয়ালাইজ হয়নি।
@SerializedName:
@SerializedName অ্যানোটেশনটি ব্যবহার করা হয় যখন আপনি Java অবজেক্টের ফিল্ডের নাম এবং JSON এর ফিল্ডের নাম আলাদা রাখতে চান। এটি JSON ফিল্ডের নামকে Java ফিল্ড নামের সাথে মেলানোর জন্য ব্যবহৃত হয়।
ব্যবহার:
@SerializedName: JSON এর ফিল্ড নাম এবং Java ফিল্ড নাম ভিন্ন হলে এটি ব্যবহৃত হয়। যেমন, JSON এ"first_name"এবং Java এ"firstName"ব্যবহার করা হলে@SerializedNameঅ্যানোটেশন দিয়ে এই দুইটি সম্পর্কিত করা যায়।
উদাহরণ:
import com.google.gson.annotations.SerializedName;
public class Person {
@SerializedName("first_name")
String firstName;
@SerializedName("last_name")
String lastName;
// কন্সট্রাকটর
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
JSON এর সাথে সামঞ্জস্য:
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
String json = "{\"first_name\":\"John\", \"last_name\":\"Doe\"}";
// Gson অবজেক্ট তৈরি করুন
Gson gson = new Gson();
// JSON স্ট্রিং থেকে Person অবজেক্টে রূপান্তর করুন
Person person = gson.fromJson(json, Person.class);
System.out.println("First Name: " + person.firstName);
System.out.println("Last Name: " + person.lastName);
}
}
আউটপুট:
First Name: John
Last Name: Doe
এখানে, JSON এর "first_name" এবং "last_name" এর মান Person ক্লাসের firstName এবং lastName ফিল্ডে ডেসিরিয়ালাইজ হয়েছে।
@Expose এবং @SerializedName একসাথে ব্যবহার:
@Expose এবং @SerializedName একসাথে ব্যবহার করে আপনি কাস্টম নাম ও সিরিয়ালাইজেশন কন্ট্রোল করতে পারেন।
উদাহরণ:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Person {
@SerializedName("first_name")
@Expose
String firstName;
@SerializedName("last_name")
@Expose(serialize = false)
String lastName;
// কন্সট্রাকটর
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
এখন, firstName সিরিয়ালাইজ হবে এবং JSON-এ "first_name" নামে প্রদর্শিত হবে, কিন্তু lastName সিরিয়ালাইজ হবে না কারণ @Expose(serialize = false) ব্যবহার করা হয়েছে।
Gson সেটআপ:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class Main {
public static void main(String[] args) {
Person person = new Person("John", "Doe");
// GsonBuilder ব্যবহার করে @Expose যুক্ত ফিল্ড সিরিয়ালাইজ করুন
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation() // শুধুমাত্র @Expose দিয়ে চিহ্নিত ফিল্ড সিরিয়ালাইজ করবে
.create();
String json = gson.toJson(person);
System.out.println(json);
}
}
আউটপুট:
{"first_name":"John"}
এখানে firstName ফিল্ড JSON-এ "first_name" হিসেবে সিরিয়ালাইজ হয়েছে এবং lastName সিরিয়ালাইজ হয়নি।
সারসংক্ষেপ:
@Expose:- সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করতে চান এমন ফিল্ডগুলোতে
@Exposeঅ্যানোটেশন ব্যবহার করুন। @Expose(serialize = false, deserialize = false)ব্যবহার করে কোনো ফিল্ড সিরিয়ালাইজ বা ডেসিরিয়ালাইজ না করতে পারেন।
- সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করতে চান এমন ফিল্ডগুলোতে
@SerializedName:- JSON-এর ফিল্ড নাম এবং Java অবজেক্টের ফিল্ড নাম ভিন্ন হলে
@SerializedNameব্যবহার করুন। - এটি JSON এবং Java অবজেক্টের নামের মধ্যে ম্যাপিং তৈরি করতে সাহায্য করে।
- JSON-এর ফিল্ড নাম এবং Java অবজেক্টের ফিল্ড নাম ভিন্ন হলে
এই দুটি অ্যানোটেশনকে একসাথে ব্যবহার করে JSON পার্সিং এবং সিরিয়ালাইজেশন প্রক্রিয়া অনেক বেশি কাস্টমাইজযোগ্য হয়।
Read more