Gson এ @SerializedName অ্যানোটেশন এবং Custom Field Naming এর মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। এগুলি মূলত JSON ডেটা এবং Java Object-এর মধ্যে ফিল্ড নামের পার্থক্য হ্যান্ডল করার জন্য ব্যবহৃত হয়।
1. @SerializedName অ্যানোটেশন:
@SerializedName অ্যানোটেশনটি Gson এর একটি শক্তিশালী ফিচার যা আপনাকে JSON ফিল্ডের নাম এবং Java ক্লাসের ফিল্ডের নামের মধ্যে পার্থক্য তৈরি করার সুযোগ দেয়। আপনি যখন JSON থেকে ডেটা পড়বেন বা JSON এ ডেটা লিখবেন, তখন Gson এই অ্যানোটেশনের মাধ্যমে আপনাকে সেই পার্থক্য ম্যানেজ করতে সাহায্য করে।
উদাহরণ:
ধরা যাক, আপনার একটি User ক্লাস রয়েছে যেখানে JSON এর ফিল্ড নাম first_name এবং last_name তবে Java ক্লাসে এগুলোর নাম firstName এবং lastName।
import com.google.gson.annotations.SerializedName;
public class User {
@SerializedName("first_name")
private String firstName;
@SerializedName("last_name")
private String lastName;
// Getter and Setter methods
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Gson দিয়ে JSON এ কনভার্ট করা:
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
// Create User object
User user = new User();
user.setFirstName("John");
user.setLastName("Doe");
// Convert to JSON using Gson
Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);
}
}
আউটপুট:
{
"first_name": "John",
"last_name": "Doe"
}
এখানে কী হচ্ছে:
@SerializedNameঅ্যানোটেশনটি Gson-কে বলে যেfirstNameJava ফিল্ডটিfirst_nameনামের JSON ফিল্ডের সাথে ম্যাপ হবে, এবংlastNameJava ফিল্ডটিlast_nameJSON ফিল্ডের সাথে ম্যাপ হবে।- Gson ডিফল্টভাবে Java ফিল্ড নাম থেকে JSON ফিল্ড নাম তৈরি করে (camelCase থেকে snake_case রূপান্তর), তবে আপনি যদি কাস্টম JSON ফিল্ড নাম ব্যবহার করতে চান, তখন
@SerializedNameঅ্যানোটেশন ব্যবহার করতে হবে।
2. Custom Field Naming (Custom Field Naming Strategy):
Custom field naming strategy হল Gson এর FieldNamingStrategy ইন্টারফেসের মাধ্যমে global বা class-level কাস্টম নামকরণ কৌশল নির্ধারণ করার একটি পদ্ধতি। এর মাধ্যমে আপনি Gson কে বলতেই পারেন যে, কীভাবে JSON ফিল্ড নামগুলো তৈরি হবে, যেমন camelCase, snake_case, PascalCase, ইত্যাদি।
উদাহরণ:
আপনি যদি snake_case অথবা অন্য কোনো কাস্টম স্ট্র্যাটেজি ব্যবহার করতে চান, তবে আপনি FieldNamingPolicy বা কাস্টম FieldNamingStrategy প্রয়োগ করতে পারেন।
কাস্টম FieldNamingStrategy উদাহরণ:
import com.google.gson.Gson;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.GsonBuilder;
public class User {
private String firstName;
private String lastName;
// Getter and Setter methods
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public static void main(String[] args) {
User user = new User();
user.setFirstName("John");
user.setLastName("Doe");
// Use GsonBuilder to apply a custom naming policy
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY) // Here you can choose other policies too, like LOWER_CASE_WITH_UNDERSCORES
.create();
String json = gson.toJson(user);
System.out.println(json);
}
}
আউটপুট:
{
"firstName": "John",
"lastName": "Doe"
}
এখানে কী হচ্ছে:
FieldNamingPolicy.IDENTITYদিয়ে Gson বলছে, যে JSON ফিল্ডের নাম Java ফিল্ডের মতোই থাকবে (যেমন camelCase ফরম্যাটে)।- আপনি বিভিন্ন স্ট্র্যাটেজি ব্যবহার করতে পারেন যেমন
FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORESবা আপনার নিজস্ব কাস্টম স্ট্র্যাটেজি।
3. পার্থক্য:
| ফিচার | @SerializedName | Custom Field Naming |
|---|---|---|
| ব্যবহার | JSON ফিল্ড নাম এবং Java ফিল্ড নামের মধ্যে নির্দিষ্ট পার্থক্য তৈরি করতে | গ্লোবালি বা ক্লাস লেভেলে ফিল্ড নাম কিভাবে হবে তা নির্ধারণ করতে |
| ফোকাস | এক বা একাধিক ফিল্ডের নাম কাস্টমাইজ করতে | সকল ফিল্ডের নামের জন্য একটি নির্দিষ্ট কৌশল ব্যবহার করতে |
| গ্লোবাল প্রভাব | শুধুমাত্র নির্দিষ্ট ফিল্ডের উপর প্রভাব ফেলে | গ্লোবালি (ক্লাসের সমস্ত ফিল্ডের জন্য) প্রভাব ফেলে |
| অ্যানোটেশন | প্রয়োজন: @SerializedName | প্রয়োজন: FieldNamingPolicy বা কাস্টম FieldNamingStrategy |
| কাস্টমাইজেশন | JSON ফিল্ড নাম নির্দিষ্টভাবে কাস্টমাইজ করা যায় | পুরো JSON ডেটার ফিল্ড নাম কাস্টমাইজ করা যায় |
| সহজতা | সহজ এবং ফিল্ড ভিত্তিক কাস্টমাইজেশন | পুরো ক্লাস বা প্রকল্পের জন্য কাস্টমাইজেশন |
4. কোনটি কখন ব্যবহার করবেন:
- @SerializedName: যখন আপনি নির্দিষ্ট JSON ফিল্ড নামের সাথে Java ফিল্ড নামের মিল নেই, তখন এই অ্যানোটেশন ব্যবহার করুন।
- Custom Field Naming (FieldNamingPolicy): যখন আপনি সমস্ত ফিল্ডের জন্য একটি নির্দিষ্ট কৌশল প্রয়োগ করতে চান, যেমন
snake_case,camelCase, ইত্যাদি। @SerializedNameঅ্যানোটেশন ব্যবহার করে আপনি একটি নির্দিষ্ট JSON ফিল্ড নাম এবং Java ফিল্ড নামের মধ্যে একটি সম্পর্ক স্থাপন করতে পারেন।- Custom Field Naming স্ট্র্যাটেজি ব্যবহারের মাধ্যমে আপনি গ্লোবালি JSON ফিল্ড নাম কাস্টমাইজ করতে পারেন, যেমন একটি নির্দিষ্ট নেমিং কনভেনশন প্রয়োগ করে।
Read more