Gson এর Field Level Customization

Exclusion Strategy এবং JSON Property কাস্টমাইজেশন - জিসন (Gson) - Java Technologies

338

Gson-এ Field Level Customization দ্বারা আপনি নির্দিষ্ট একটি ফিল্ডের জন্য কাস্টম সেরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন পরিচালনা করতে পারেন। এটি করার জন্য @SerializedName, @Expose, এবং @JsonAdapter এর মতো অ্যানোটেশন ব্যবহার করা যেতে পারে।

নিচে কিছু সাধারণ টেকনিক্স ব্যাখ্যা করা হয়েছে যা আপনি Gson এর ফিল্ড লেভেল কাস্টমাইজেশনের জন্য ব্যবহার করতে পারেন।

1. @SerializedName ব্যবহার করা

@SerializedName অ্যানোটেশনটি মূলত ফিল্ডের নাম পরিবর্তন করতে ব্যবহৃত হয় যখন JSON-এর ফিল্ডের নাম Java ক্লাসের ফিল্ড নামের সাথে মেলে না। এর মাধ্যমে আপনি JSON এবং Java কোডের মধ্যে নামের অমিল মেটাতে পারেন।

উদাহরণ:

import com.google.gson.annotations.SerializedName;

class Person {
    @SerializedName("full_name")
    private String name;

    @SerializedName("age_in_years")
    private int age;

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        // Gson তৈরি করা
        Gson gson = new Gson();

        // Java Object তৈরি করা
        Person person = new Person("John Doe", 30);

        // Java Object কে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Java Object এ কনভার্ট করা
        Person personFromJson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + personFromJson.getName() + ", Age: " + personFromJson.getAge());
    }
}

আউটপুট:

Serialized JSON: {"full_name":"John Doe","age_in_years":30}
Deserialized Person: John Doe, Age: 30

এখানে, @SerializedName("full_name") এবং @SerializedName("age_in_years") অ্যানোটেশন ব্যবহার করে JSON ফিল্ড নামের সাথে Java ফিল্ড নামের অমিল মেটানো হয়েছে।

2. @Expose ব্যবহার করা

@Expose অ্যানোটেশনটি আপনাকে নির্দিষ্ট ফিল্ডগুলিকে JSON সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার জন্য এক্সপোজ বা এক্সক্লুড করার সুযোগ দেয়। যদি আপনি একটি ফিল্ডকে JSON পার্সিং প্রক্রিয়া থেকে বাদ দিতে চান, তাহলে @Expose ব্যবহার করতে পারেন।

উদাহরণ:

import com.google.gson.annotations.Expose;

class Person {
    @Expose
    private String name;
    
    @Expose(serialize = false, deserialize = false)
    private int age;  // এই ফিল্ডটি সিরিয়ালাইজ বা ডেসিরিয়ালাইজ হবে না

    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter methods
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

public class Main {
    public static void main(String[] args) {
        // Gson তৈরি করা
        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); // Expose ব্যবহার
       
        // Java Object তৈরি করা
        Person person = new Person("John Doe", 30);

        // Java Object কে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Java Object এ কনভার্ট করা
        Person personFromJson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + personFromJson.getName());
    }
}

আউটপুট:

Serialized JSON: {"name":"John Doe"}
Deserialized Person: John Doe

এখানে, age ফিল্ডটি @Expose(serialize = false, deserialize = false) দ্বারা বাদ দেওয়া হয়েছে, তাই এটি JSON এ সেরিয়ালাইজ এবং ডেসিরিয়ালাইজ হয়নি।

3. @JsonAdapter ব্যবহার করা

যদি আপনি নির্দিষ্ট ফিল্ডের জন্য কাস্টম সেরিয়ালাইজার বা ডেসিরিয়ালাইজার ব্যবহার করতে চান, তবে আপনি @JsonAdapter অ্যানোটেশনটি ব্যবহার করতে পারেন। এটি কাস্টম TypeAdapter ব্যবহার করতে সাহায্য করে।

উদাহরণ:

import com.google.gson.*;
import com.google.gson.annotations.JsonAdapter;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;

// কাস্টম সেরিয়ালাইজার এবং ডেসিরিয়ালাইজার
class DateAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {
    private static final String DATE_FORMAT = "yyyy-MM-dd";

    @Override
    public JsonElement serialize(Date date, Type typeOfSrc, JsonSerializationContext context) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        return new JsonPrimitive(sdf.format(date));
    }

    @Override
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        try {
            return sdf.parse(json.getAsString());
        } catch (Exception e) {
            throw new JsonParseException("Invalid date format", e);
        }
    }
}

class Person {
    private String name;

    @JsonAdapter(DateAdapter.class) // কাস্টম অ্যাডাপ্টার ব্যবহার
    private Date birthDate;

    public Person(String name, Date birthDate) {
        this.name = name;
        this.birthDate = birthDate;
    }

    public String getName() {
        return name;
    }

    public Date getBirthDate() {
        return birthDate;
    }
}

public class Main {
    public static void main(String[] args) {
        // Gson তৈরি করা
        Gson gson = new Gson();

        // Java Object তৈরি করা
        Person person = new Person("John Doe", new Date());

        // Java Object কে JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println("Serialized JSON: " + json);

        // JSON থেকে Java Object এ কনভার্ট করা
        Person personFromJson = gson.fromJson(json, Person.class);
        System.out.println("Deserialized Person: " + personFromJson.getName() + ", Birth Date: " + personFromJson.getBirthDate());
    }
}

আউটপুট:

Serialized JSON: {"name":"John Doe","birthDate":"2024-12-19"}
Deserialized Person: John Doe, Birth Date: Thu Dec 19 14:56:34 UTC 2024

এখানে, @JsonAdapter(DateAdapter.class) ব্যবহার করা হয়েছে, যা birthDate ফিল্ডের জন্য কাস্টম DateAdapter অ্যাডাপ্টার নির্ধারণ করে।

Gson-এ Field Level Customization আপনাকে JSON পার্সিং এবং সিরিয়ালাইজেশনে আরো নমনীয়তা দেয়। @SerializedName, @Expose, এবং @JsonAdapter অ্যানোটেশন ব্যবহার করে আপনি নির্দিষ্ট ফিল্ডগুলির জন্য কাস্টমাইজেশন পরিচালনা করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...