Gson এর Field Naming Strategy হল একটি কৌশল যা JSON ডেটার ফিল্ড নামগুলি Java ক্লাসের ফিল্ড নামের সাথে মেলানোর প্রক্রিয়া নিয়ন্ত্রণ করে। এর মাধ্যমে আপনি JSON ডেটার ফিল্ড নামের ক্ষেত্রে কাস্টম রূপান্তর নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, Java ফিল্ড নামের স্টাইল (camelCase, snake_case, ইত্যাদি) এবং JSON ফিল্ড নামের স্টাইলের মধ্যে মেলবন্ধন করার জন্য আপনি Field Naming Strategy ব্যবহার করতে পারেন।
Field Naming Strategy এর প্রকারভেদ
- CamelCase to SnakeCase: Java ক্লাসের ফিল্ড নামের স্টাইল (camelCase) থেকে JSON ফিল্ড নামের স্টাইল (snake_case) এ রূপান্তর।
- Custom Naming Strategy: আপনার নিজস্ব কাস্টম ফিল্ড নামের কৌশল তৈরি করা।
@SerializedNameঅ্যানোটেশন ব্যবহার: ফিল্ড নামের পরিবর্তনকে কাস্টমাইজ করা।
1. Default Field Naming Strategy
Gson ডিফল্টভাবে Java ফিল্ড নামের সাথে JSON ফিল্ড নাম মেলে রাখে, অর্থাৎ camelCase Java ফিল্ড নাম camelCase JSON ফিল্ড নাম হিসেবে রূপান্তরিত হয়।
Java Class (Default Naming):
class User {
String userName; // camelCase
int userAge; // camelCase
public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}
}
JSON (Default Naming):
{
"userName": "Rahim",
"userAge": 30
}
এখানে camelCase ফিল্ড নাম camelCase JSON ডেটায় রূপান্তরিত হয়েছে। Gson স্বাভাবিকভাবে একই ফিল্ড নাম ব্যবহার করে।
2. CamelCase থেকে SnakeCase (Gson Field Naming Strategy)
আপনি camelCase Java ফিল্ড নাম থেকে snake_case JSON ফিল্ড নাম তৈরি করতে চাইলে, FieldNamingPolicy ব্যবহার করে এটির রূপান্তর করতে পারবেন। Gson এ FieldNamingPolicy নামে একটি বিল্ট-ইন কৌশল রয়েছে, যা নামের স্টাইল পরিবর্তন করার জন্য ব্যবহৃত হয়।
Java Class (Using FieldNamingPolicy):
import com.google.gson.*;
class User {
String userName; // camelCase
int userAge; // camelCase
public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}
}
Java Code (Using FieldNamingPolicy):
import com.google.gson.*;
public class Main {
public static void main(String[] args) {
User user = new User("Rahim", 30);
// GsonBuilder with FieldNamingPolicy to convert camelCase to snake_case
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
Gson gson = gsonBuilder.create();
// Serialize User object to JSON
String json = gson.toJson(user);
System.out.println(json);
}
}
আউটপুট:
{
"user_name": "Rahim",
"user_age": 30
}
এখানে, FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES ব্যবহার করে camelCase থেকে snake_case এ ফিল্ড নাম রূপান্তরিত হয়েছে।
3. Custom Naming Strategy (Custom FieldNamingPolicy)
আপনি যদি কাস্টম ফিল্ড নাম স্ট্রাটেজি তৈরি করতে চান, তবে Gson আপনাকে FieldNamingStrategy ইন্টারফেস ব্যবহার করার সুযোগ দেয়। এর মাধ্যমে আপনি নিজস্ব কাস্টম ফিল্ড নামের কৌশল নির্ধারণ করতে পারবেন।
Custom Naming Strategy Example:
import com.google.gson.*;
import com.google.gson.FieldNamingStrategy;
import java.lang.reflect.Field;
class User {
String userName;
int userAge;
public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}
}
class CustomFieldNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
// Custom logic: Capitalize first letter of each word
String fieldName = field.getName();
return fieldName.toUpperCase();
}
}
public class Main {
public static void main(String[] args) {
User user = new User("Rahim", 30);
// GsonBuilder with custom naming strategy
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingStrategy(new CustomFieldNamingStrategy());
Gson gson = gsonBuilder.create();
// Serialize User object to JSON with custom field names
String json = gson.toJson(user);
System.out.println(json);
}
}
আউটপুট:
{
"USERNAME": "Rahim",
"USERAGE": 30
}
এখানে, CustomFieldNamingStrategy ব্যবহার করে আমরা userName এবং userAge ফিল্ডগুলির নাম কাস্টমভাবে রূপান্তর করেছি।
4. @SerializedName অ্যানোটেশন ব্যবহার
যখন আপনার কিছু ফিল্ডের জন্য JSON ফিল্ড নামটি আলাদা থাকে, তখন আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন। এই অ্যানোটেশন দ্বারা, আপনি Java ফিল্ড নামের সাথে JSON ফিল্ড নামের একটি ম্যাপিং তৈরি করতে পারেন।
Example using @SerializedName:
import com.google.gson.annotations.SerializedName;
class User {
@SerializedName("user_name")
String userName;
@SerializedName("user_age")
int userAge;
public User(String userName, int userAge) {
this.userName = userName;
this.userAge = userAge;
}
}
JSON Output (with @SerializedName):
{
"user_name": "Rahim",
"user_age": 30
}
এখানে, @SerializedName অ্যানোটেশন ব্যবহার করে Java ফিল্ড নাম এবং JSON ফিল্ড নাম এর মধ্যে কাস্টম ম্যাপিং তৈরি করা হয়েছে।
সারাংশ:
- Field Naming Policy: Gson
FieldNamingPolicyব্যবহার করে camelCase থেকে snake_case সহ অন্যান্য ফিল্ড নাম স্টাইল পরিবর্তন করা সম্ভব। এটি Gson এর ডিফল্ট ফিল্ড নাম স্টাইলের পরিবর্তে JSON ফিল্ড নামের ফরম্যাট নির্ধারণ করে।FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES: camelCase থেকে snake_case এ রূপান্তর।
- Custom Naming Strategy:
FieldNamingStrategyইন্টারফেস ব্যবহার করে আপনি নিজের কাস্টম ফিল্ড নাম স্ট্রাটেজি তৈরি করতে পারেন। @SerializedName: ফিল্ড নামের কাস্টম ম্যাপিং করার জন্য@SerializedNameঅ্যানোটেশন ব্যবহার করা হয়, যাতে আপনি JSON ডেটার ফিল্ড নাম এবং Java ফিল্ড নামের মধ্যে সম্পর্ক তৈরি করতে পারেন।
এই ফিচারগুলো Gson-এর মাধ্যমে JSON ডেটার ফিল্ড নাম এবং Java ক্লাসের ফিল্ড নামের মধ্যে আদর্শ মেলবন্ধন বা কাস্টমাইজেশন করার জন্য খুবই উপকারী।
Field Naming Strategy হল Gson এর একটি বৈশিষ্ট্য যা JSON-এ ফিল্ড নাম এবং Java অবজেক্টের ফিল্ড নামের মধ্যে ম্যাপিং কনফিগার করতে সাহায্য করে। এটি ব্যবহার করে আপনি ফিল্ড নামের স্টাইল (যেমন ক্যামেল কেস, স্নেক কেস, প্যাসকাল কেস) বা ফিল্ড নামের কনভেনশন কাস্টমাইজ করতে পারেন।
Gson-এর Field Naming Strategy আপনাকে একটি NamingPolicy কাস্টমাইজ করার সুযোগ দেয়, যার মাধ্যমে JSON-এর ফিল্ড নাম এবং Java ক্লাসের ফিল্ড নামের মধ্যকার সম্পর্ক নির্ধারণ করা হয়।
Field Naming Strategy এর ধরন:
- Default Naming (camelCase): Gson ডিফল্টভাবে Java ক্লাসের ফিল্ড নামগুলিকে camelCase স্টাইলে JSON-এ কনভার্ট করে।
FieldNamingPolicy.IDENTITY: এটি ফিল্ড নামের ক্ষেত্রে কোনো পরিবর্তন করে না। Java ফিল্ড নাম সরাসরি JSON ফিল্ড নাম হিসেবে ব্যবহৃত হয়।FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES: ফিল্ড নামগুলোকে lower_case_with_underscores (স্নেক কেস) এ রূপান্তর করে।FieldNamingPolicy.UPPER_CAMEL_CASE: এটি PascalCase বা UpperCamelCase এ ফিল্ড নাম রূপান্তর করে, যেখানে প্রথম অক্ষর বড় হাতের অক্ষর হয়।- কাস্টম Field Naming Strategy: আপনি নিজের কাস্টম Naming Strategy তৈরি করতে পারেন, যাতে আপনার প্রয়োজন অনুযায়ী ফিল্ড নামের রূপান্তর করা যায়।
1. Default Naming (camelCase)
Gson ডিফল্টভাবে Java অবজেক্টের ফিল্ড নামগুলিকে camelCase-এ সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করে। যেমন, firstName Java ফিল্ডটি JSON-এ "firstName" হিসেবে সিরিয়ালাইজ হয়।
উদাহরণ:
import com.google.gson.Gson;
class User {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("John", "Doe");
// Gson অবজেক্ট তৈরি করুন
Gson gson = new Gson();
// JSON এ রূপান্তর
String json = gson.toJson(user);
System.out.println(json); // {"firstName":"John","lastName":"Doe"}
}
}
আউটপুট:
{"firstName":"John","lastName":"Doe"}
2. FieldNamingPolicy.IDENTITY
এটি ফিল্ড নামের কোনো পরিবর্তন করেনা। Java অবজেক্টের ফিল্ড নাম সরাসরি JSON এ ব্যবহার হবে।
উদাহরণ:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.FieldNamingPolicy;
class User {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("John", "Doe");
// GsonBuilder ব্যবহার করে FieldNamingPolicy.IDENTITY সেট করুন
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.IDENTITY)
.create();
// JSON এ রূপান্তর
String json = gson.toJson(user);
System.out.println(json); // {"firstName":"John","lastName":"Doe"}
}
}
আউটপুট:
{"firstName":"John","lastName":"Doe"}
3. FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES (Snake Case)
এই কনফিগারেশনটি camelCase নামগুলোকে snake_case বা lower_case_with_underscores এ রূপান্তর করে। এটি বেশিরভাগ ক্ষেত্রে API ডেভেলপমেন্টে ব্যবহৃত হয় যেখানে ফিল্ড নামের মধ্যে আন্ডারস্কোর ব্যবহৃত হয়।
উদাহরণ:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.FieldNamingPolicy;
class User {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("John", "Doe");
// GsonBuilder ব্যবহার করে LOWER_CASE_WITH_UNDERSCORES কনফিগারেশন সেট করুন
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
// JSON এ রূপান্তর
String json = gson.toJson(user);
System.out.println(json); // {"first_name":"John","last_name":"Doe"}
}
}
আউটপুট:
{"first_name":"John","last_name":"Doe"}
4. FieldNamingPolicy.UPPER_CAMEL_CASE (Pascal Case)
এটি PascalCase বা UpperCamelCase ফরম্যাটে ফিল্ড নাম রূপান্তর করে। এটি মূলত ফিল্ড নামের প্রথম অক্ষর বড় হাতের অক্ষরে পরিবর্তন করে।
উদাহরণ:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.FieldNamingPolicy;
class User {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("John", "Doe");
// GsonBuilder ব্যবহার করে UPPER_CAMEL_CASE কনফিগারেশন সেট করুন
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
// JSON এ রূপান্তর
String json = gson.toJson(user);
System.out.println(json); // {"FirstName":"John","LastName":"Doe"}
}
}
আউটপুট:
{"FirstName":"John","LastName":"Doe"}
5. কাস্টম Field Naming Strategy
আপনি যদি একটি কাস্টম FieldNamingStrategy তৈরি করতে চান, তাহলে FieldNamingStrategy ইন্টারফেস ইমপ্লিমেন্ট করে নিজের স্টাইল নির্ধারণ করতে পারেন। এটি Java অবজেক্টের ফিল্ড নামগুলোর রূপান্তর কাস্টমাইজ করতে সাহায্য করে।
উদাহরণ:
import com.google.gson.*;
import com.google.gson.FieldNamingStrategy;
import java.lang.reflect.Field;
class User {
String firstName;
String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Main {
public static void main(String[] args) {
User user = new User("John", "Doe");
// কাস্টম FieldNamingStrategy তৈরি করুন
FieldNamingStrategy customNamingStrategy = new FieldNamingStrategy() {
@Override
public String translateName(Field f) {
return f.getName().toUpperCase(); // ফিল্ড নামটি uppercase করে দিবে
}
};
// GsonBuilder ব্যবহার করে কাস্টম naming strategy সেট করুন
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(customNamingStrategy)
.create();
// JSON এ রূপান্তর
String json = gson.toJson(user);
System.out.println(json); // {"FIRSTNAME":"John","LASTNAME":"Doe"}
}
}
আউটপুট:
{"FIRSTNAME":"John","LASTNAME":"Doe"}
সারসংক্ষেপ:
FieldNamingPolicy.IDENTITY: Java ফিল্ড নাম সরাসরি JSON এ ব্যবহার হয়।FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES: JSON ফিল্ড নামগুলোকে snake_case (lower_case_with_underscores) এ রূপান্তর করে।FieldNamingPolicy.UPPER_CAMEL_CASE: JSON ফিল্ড নামগুলোকে PascalCase বা UpperCamelCase এ রূপান্তর করে।- কাস্টম Field Naming Strategy: নিজের কাস্টম স্টাইল তৈরি করতে
FieldNamingStrategyইন্টারফেস ইমপ্লিমেন্ট করতে পারেন।
এভাবে Gson এর Field Naming Strategy ব্যবহার করে আপনি JSON ফিল্ড নাম কাস্টমাইজ করতে পারেন, যা JSON ডেটা এবং Java ক্লাসের মধ্যে সঙ্গতি বজায় রাখতে সাহায্য করে।
Gson-এ Custom Field Naming Strategy তৈরি করা খুবই সহজ, এবং এটি ব্যবহৃত হয় যখন আপনি JSON এর ফিল্ড নামগুলো কাস্টমাইজ করতে চান। আপনি যদি Java ক্লাসের ফিল্ড নামগুলোকে একটি নির্দিষ্ট নিয়ম অনুসারে JSON-এ রূপান্তর করতে চান, তবে আপনি FieldNamingStrategy ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি কাস্টম নামকরণ কৌশল (naming strategy) তৈরি করতে পারেন।
Custom Field Naming Strategy তৈরি করার প্রক্রিয়া:
FieldNamingStrategyইন্টারফেস ইমপ্লিমেন্ট করা: এই ইন্টারফেসে একটিtranslateName(Field field)মেথড থাকে, যা ফিল্ডের নাম পরিবর্তন করার জন্য কাস্টম লজিক বাস্তবায়ন করতে সাহায্য করে।- GsonBuilder এ কাস্টম স্ট্রাটেজি যুক্ত করা: এরপর এই কাস্টম স্ট্রাটেজি GsonBuilder-এ রেজিস্টার করতে হবে।
উদাহরণ:
ধরা যাক, আপনি Java ক্লাসের ফিল্ড নামগুলিকে snake_case ফরম্যাটে কনভার্ট করতে চান, অর্থাৎ যদি আপনার Java ক্লাসে কোনো ফিল্ডের নাম firstName হয়, তাহলে JSON এ তা first_name হিসেবে রূপান্তর হবে।
1. Custom Field Naming Strategy (Snake Case) উদাহরণ:
import com.google.gson.*;
import com.google.gson.FieldNamingStrategy;
import java.lang.reflect.Field;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
// Custom Field Naming Strategy
class SnakeCaseNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
String name = field.getName();
StringBuilder snakeCaseName = new StringBuilder();
// Convert camelCase to snake_case
for (char c : name.toCharArray()) {
if (Character.isUpperCase(c)) {
// Add an underscore before uppercase letter and convert it to lowercase
snakeCaseName.append('_').append(Character.toLowerCase(c));
} else {
snakeCaseName.append(c);
}
}
return snakeCaseName.toString();
}
}
class Person {
private String firstName;
private String lastName;
private int age;
public Person(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
// Gson তৈরি করা Custom Field Naming Strategy দিয়ে
Gson gson = new GsonBuilder()
.setFieldNamingStrategy(new SnakeCaseNamingStrategy()) // কাস্টম নামকরণ স্ট্রাটেজি ব্যবহার
.create();
// Java Object তৈরি করা
Person person = new Person("John", "Doe", 30);
// Java Object কে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println("Serialized JSON: " + json);
}
}
আউটপুট:
Serialized JSON: {"first_name":"John","last_name":"Doe","age":30}
ব্যাখ্যা:
- SnakeCaseNamingStrategy:
translateNameমেথডটি প্রতিটি ফিল্ডের নাম কনভার্ট করেcamelCaseথেকেsnake_caseএ। এর জন্য প্রতিটি বড় হাতের অক্ষরের আগে_চিহ্ন যোগ করা হয় এবং বড় হাতের অক্ষরগুলো ছোট হাতের অক্ষরে পরিবর্তিত হয়।
- GsonBuilder:
.setFieldNamingStrategy(new SnakeCaseNamingStrategy())কোডটি GsonBuilder এ কাস্টম নামকরণ স্ট্রাটেজি রেজিস্টার করে। এর ফলে Gson যেকোনো Java অবজেক্টকে JSON-এ রূপান্তর করার সময় এই কাস্টম নামকরণ কৌশল ব্যবহার করবে।
2. অন্য ধরনের নামকরণ কৌশল (PascalCase, Uppercase):
আপনি যদি অন্য ধরনের নামকরণ কৌশল যেমন PascalCase বা UPPERCASE চান, তবে একইভাবে কাস্টম FieldNamingStrategy তৈরি করতে পারেন।
PascalCase উদাহরণ:
class PascalCaseNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
String name = field.getName();
StringBuilder pascalCaseName = new StringBuilder();
// Convert camelCase to PascalCase
for (char c : name.toCharArray()) {
if (Character.isUpperCase(c)) {
pascalCaseName.append(c);
} else {
pascalCaseName.append(Character.toUpperCase(c));
}
}
return pascalCaseName.toString();
}
}
Uppercase উদাহরণ:
class UppercaseNamingStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field field) {
return field.getName().toUpperCase(); // সব কিছু বড় হাতের অক্ষরে রূপান্তর
}
}
- Custom Field Naming Strategy আপনাকে JSON ফিল্ড নামগুলোর কাস্টমাইজেশন করার সুযোগ দেয়, যেমন আপনি
camelCaseথেকেsnake_caseবাPascalCaseএ রূপান্তর করতে পারেন। - আপনি
FieldNamingStrategyইন্টারফেস ইমপ্লিমেন্ট করে নিজের কাস্টম স্ট্রাটেজি তৈরি করতে পারেন এবং এটি GsonBuilder এর মাধ্যমে ব্যবহার করতে পারেন।
Gson লাইব্রেরি দিয়ে আপনি সহজেই JSON ফিল্ডের নাম পরিবর্তন এবং mapping কনফিগারেশন করতে পারেন। এটা করার জন্য, আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন। @SerializedName অ্যানোটেশনটি আপনাকে Java ফিল্ড এবং JSON ফিল্ডের মধ্যে কাস্টম ম্যাপিং করতে সাহায্য করে, যখন JSON ডাটা একটি ভিন্ন নাম বা ফরম্যাটে থাকে।
1. @SerializedName অ্যানোটেশন ব্যবহার করে ফিল্ড নাম পরিবর্তন
এটি যখন প্রয়োজন হয়, যে সময় JSON ফিল্ডের নাম Java ফিল্ডের নামের সাথে মেলে না বা আপনি JSON ফাইলের স্টাইল (যেমন, snake_case বা camelCase) এর সাথে কাজ করছেন।
উদাহরণ:
ধরা যাক, আপনার JSON ডাটা এমন:
{
"first_name": "John",
"last_name": "Doe",
"user_email": "john.doe@example.com"
}
এখন, আপনি যদি এই JSON ডাটাকে Person নামক Java ক্লাসে ম্যাপ করতে চান, তবে আপনি @SerializedName অ্যানোটেশন ব্যবহার করতে পারেন।
Java ক্লাস:
import com.google.gson.annotations.SerializedName;
class Person {
@SerializedName("first_name")
String firstName;
@SerializedName("last_name")
String lastName;
@SerializedName("user_email")
String email;
public Person(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
}
JSON Parsing Example:
import com.google.gson.Gson;
public class GsonFieldNameExample {
public static void main(String[] args) {
// JSON ডাটা স্ট্রিং
String json = "{\"first_name\":\"John\", \"last_name\":\"Doe\", \"user_email\":\"john.doe@example.com\"}";
// Gson অবজেক্ট তৈরি
Gson gson = new Gson();
// JSON ডাটা থেকে Person অবজেক্টে রূপান্তর করা
Person person = gson.fromJson(json, Person.class);
// Person অবজেক্ট প্রিন্ট করা
System.out.println("First Name: " + person.firstName);
System.out.println("Last Name: " + person.lastName);
System.out.println("Email: " + person.email);
}
}
আউটপুট:
First Name: John
Last Name: Doe
Email: john.doe@example.com
ব্যাখ্যা:
@SerializedNameঅ্যানোটেশনটিPersonক্লাসের ফিল্ডগুলির নাম এবং JSON ফিল্ডের নামের মধ্যে ম্যাপিং তৈরি করে। যেমনfirst_nameJSON ফিল্ডটিfirstNameJava ফিল্ডের সাথে ম্যাপ হয়েছে।
2. @SerializedName অ্যানোটেশন সহ বিভিন্ন JSON কনফিগারেশন
এছাড়া, @SerializedName অ্যানোটেশনটি একাধিক প্যারামিটার সহ ব্যবহার করা যেতে পারে, যা কাস্টম কনফিগারেশন প্রদান করে।
উদাহরণ:
import com.google.gson.annotations.SerializedName;
class Person {
@SerializedName(value = "first_name", alternate = {"firstName", "fname"})
String firstName;
@SerializedName(value = "last_name", alternate = {"lastName"})
String lastName;
@SerializedName("user_email")
String email;
}
এখানে alternate ব্যবহার করা হয়েছে, যা JSON এর একাধিক সম্ভাব্য নামের সাথে কনফিগার করা হয়। উদাহরণস্বরূপ:
- JSON ফিল্ডের নাম
first_name,firstName, অথবাfnameযেকোনো একটির সাথেfirstNameJava ফিল্ডটি ম্যাপ হবে।
JSON Parsing Example:
import com.google.gson.Gson;
public class GsonFieldNameExample {
public static void main(String[] args) {
// JSON ডাটা স্ট্রিং
String json = "{\"firstName\":\"John\", \"lastName\":\"Doe\", \"user_email\":\"john.doe@example.com\"}";
// Gson অবজেক্ট তৈরি
Gson gson = new Gson();
// JSON ডাটা থেকে Person অবজেক্টে রূপান্তর করা
Person person = gson.fromJson(json, Person.class);
// Person অবজেক্ট প্রিন্ট করা
System.out.println("First Name: " + person.firstName);
System.out.println("Last Name: " + person.lastName);
System.out.println("Email: " + person.email);
}
}
আউটপুট:
First Name: John
Last Name: Doe
Email: john.doe@example.com
3. GsonBuilder দিয়ে কাস্টম Mapping কনফিগারেশন
এছাড়াও, আপনি GsonBuilder ব্যবহার করে কাস্টম ফিল্ড নাম ম্যাপিং কনফিগার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি সকল ফিল্ডের নামের স্টাইল পরিবর্তন করতে চান (যেমন snake_case থেকে camelCase), তাহলে আপনি FieldNamingPolicy ব্যবহার করতে পারেন।
উদাহরণ:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
class Person {
String firstName;
String lastName;
String email;
}
public class GsonFieldNamingPolicyExample {
public static void main(String[] args) {
// Person অবজেক্ট তৈরি
Person person = new Person();
person.firstName = "John";
person.lastName = "Doe";
person.email = "john.doe@example.com";
// GsonBuilder দিয়ে কাস্টম FieldNamingPolicy ব্যবহার করা
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(com.google.gson.FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
// Person অবজেক্টকে JSON এ কনভার্ট করা
String json = gson.toJson(person);
System.out.println(json);
}
}
আউটপুট:
{"first_name":"John","last_name":"Doe","email":"john.doe@example.com"}
ব্যাখ্যা:
- এখানে
FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORESব্যবহার করা হয়েছে, যা সকল Java ফিল্ড নামের মধ্যে_(underscore) যোগ করে এবং ছোট অক্ষরে রূপান্তরিত করে। @SerializedNameঅ্যানোটেশন ব্যবহার করে আপনি JSON ফিল্ড নাম এবং Java ফিল্ড নামের মধ্যে কাস্টম ম্যাপিং করতে পারেন। এটি JSON ফরম্যাটের বিভিন্ন শৈলী এবং মানের জন্য খুবই কার্যকরী।alternateপ্যারামিটার ব্যবহার করে একাধিক JSON ফিল্ড নামের সাথে একই Java ফিল্ড ম্যাপ করা যায়।- GsonBuilder এর মাধ্যমে কাস্টম
FieldNamingPolicyব্যবহার করে আপনি Java ফিল্ডের নামের স্টাইল পরিবর্তন করতে পারেন।
এভাবে Gson লাইব্রেরির মাধ্যমে আপনি JSON ডাটা ফরম্যাটের সাথে সঠিকভাবে মিলে গিয়ে আপনার Java অবজেক্টের ফিল্ডের নাম পরিবর্তন ও কাস্টম ম্যাপিং কনফিগারেশন করতে পারেন।
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