Gson ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করার সময়, যদি কোন ফিল্ড JSON ডেটাতে না থাকে, তাহলে সাধারণভাবে সে ফিল্ডটির ডিফল্ট মান (default value) সেট করা হয়। তবে, আপনি চাইলে কাস্টম ডিফল্ট মানও সেট করতে পারেন, যাতে আপনি যখন JSON ডেটাতে কোন ফিল্ডের মান না পান, তখন সেই কাস্টম মান ব্যবহার করা হয়।
Default Value Handling in Gson
Gson ব্যবহার করে ডিফল্ট মান সেট করতে গেলে সাধারণভাবে আপনি @SerializedName অ্যানোটেশন বা কাস্টম ডেসিরিয়ালাইজার ব্যবহার করতে পারেন। নিচে দুটো উদাহরণ দেওয়া হয়েছে:
1. ডিফল্ট মানের জন্য সাধারণ পদ্ধতি:
যদি JSON ডেটাতে কোন ফিল্ডের মান না থাকে, তবে Java ক্লাসে ঐ ফিল্ডের ডিফল্ট মান ব্যবহৃত হবে।
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter and Setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"John\"}"; // age ফিল্ডটি JSON তে নেই
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person); // Output: Person{name='John', age=0}
}
}
এখানে age ফিল্ডটির জন্য ডিফল্ট মান 0 হবে, কারণ এটি int টাইপ এবং int এর ডিফল্ট মান হল 0।
2. কাস্টম ডিফল্ট মান সেট করা (Custom Default Value):
যদি আপনি চাইলে কোন ফিল্ডে কাস্টম ডিফল্ট মান সেট করতে, তাহলে আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন বা কাস্টম ডেসিরিয়ালাইজার তৈরি করতে পারেন।
উদাহরণ: কাস্টম ডিফল্ট মান
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
class Person {
private String name;
@SerializedName("age")
private Integer age = 30; // Default value 30 if not found in JSON
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"John\"}"; // age ফিল্ডটি JSON তে নেই
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person); // Output: Person{name='John', age=30}
}
}
এখানে, যদি JSON ডেটাতে age ফিল্ডের মান না থাকে, তবে age ফিল্ডের ডিফল্ট মান হবে 30।
3. কাস্টম ডেসিরিয়ালাইজার ব্যবহার করা:
আপনি চাইলে কাস্টম ডেসিরিয়ালাইজার তৈরি করে JSON ডেটা ডেসিরিয়ালাইজ করার সময় ডিফল্ট মান সেট করতে পারেন। এটি আরও ফ্লেক্সিবিলিটি দেয় এবং আপনি আরো কাস্টম লজিক প্রয়োগ করতে পারেন।
import com.google.gson.*;
import java.lang.reflect.Type;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
class PersonDeserializer implements JsonDeserializer<Person> {
@Override
public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String name = jsonObject.has("name") ? jsonObject.get("name").getAsString() : "Unknown"; // Default to "Unknown"
int age = jsonObject.has("age") ? jsonObject.get("age").getAsInt() : 25; // Default to 25
return new Person(name, age);
}
}
public class Main {
public static void main(String[] args) {
String json = "{\"name\":\"John\"}"; // age ফিল্ডটি JSON তে নেই
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonDeserializer()) // Register custom deserializer
.create();
Person person = gson.fromJson(json, Person.class);
System.out.println(person); // Output: Person{name='John', age=25}
}
}
ব্যাখ্যা:
PersonDeserializer: এটি একটি কাস্টম ডেসিরিয়ালাইজার, যা JSON ডেটাতে ফিল্ডের উপস্থিতি চেক করে। যদি কোন ফিল্ড অনুপস্থিত থাকে, তাহলে সেটি একটি কাস্টম ডিফল্ট মান (যেমনageজন্য25এবংnameজন্যUnknown) সেট করে।GsonBuilder:registerTypeAdapterমেথড ব্যবহার করে কাস্টম ডেসিরিয়ালাইজারকেGsonএ নিবন্ধিত করা হয়েছে।
সারাংশ:
- Gson ডিফল্টভাবে JSON ডেটাতে কোনো ফিল্ড অনুপস্থিত থাকলে Java ক্লাসের ডিফল্ট মান ব্যবহার করে।
- আপনি কাস্টম ডিফল্ট মান সেট করতে পারেন Java ক্লাসে প্রপার্টির জন্য, অথবা কাস্টম ডেসিরিয়ালাইজার ব্যবহার করে JSON ডেটা ডেসিরিয়ালাইজ করার সময় বিশেষ মান প্রয়োগ করতে পারেন।
- এইভাবে আপনি আপনার প্রোজেক্টের জন্য আরো নিয়ন্ত্রণ রাখতে পারেন।
Read more