Custom TypeAdapter তৈরি করা

Gson এর Type Adapters - জিসন (Gson) - Java Technologies

308

Gson এর Custom TypeAdapter একটি শক্তিশালী ফিচার যা আপনাকে JSON ডেটার Serialization এবং Deserialization প্রক্রিয়াকে কাস্টমাইজ করার সুযোগ দেয়। আপনি যখন Gson ব্যবহার করেন, তখন ডিফল্টভাবে এটি সাধারণ Object গুলি JSON-এ কনভার্ট বা JSON থেকে Object-এ কনভার্ট করে, তবে Custom TypeAdapter এর মাধ্যমে আপনি আরও কাস্টম রূপান্তর করতে পারেন।

TypeAdapter কাস্টম Serialization এবং Deserialization লজিক নির্দিষ্ট টাইপের জন্য প্রদান করে।

Custom TypeAdapter তৈরি করা:

1. Custom Serialization এবং Deserialization (Serialization এবং Deserialization কাস্টমাইজ করা)

ধরা যাক, আপনার একটি Person ক্লাস আছে এবং আপনি এটি JSON-এ কনভার্ট করতে চান, তবে আপনি কিছু বিশেষ ফরম্যাটে name বা birthDate ফিল্ড দেখতে চান। এজন্য আপনাকে একটি কাস্টম TypeAdapter তৈরি করতে হবে।

2. Person ক্লাস উদাহরণ:

import java.util.Date;

public class Person {
    private String name;
    private int age;
    private Date birthDate;

    // Constructor, getters, and setters
    public Person(String name, int age, Date birthDate) {
        this.name = name;
        this.age = age;
        this.birthDate = birthDate;
    }

    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;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }
}

3. Custom TypeAdapter তৈরি করা:

Person ক্লাসের জন্য একটি কাস্টম TypeAdapter তৈরি করতে হবে যা Serialization এবং Deserialization কাস্টমাইজ করবে।

import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class PersonTypeAdapter extends TypeAdapter<Person> {

    @Override
    public void write(JsonWriter out, Person person) throws IOException {
        if (person == null) {
            out.nullValue();
            return;
        }

        out.beginObject();
        out.name("name").value(person.getName());
        out.name("age").value(person.getAge());

        // কাস্টম Date ফরম্যাটিং
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        out.name("birthDate").value(sdf.format(person.getBirthDate()));

        out.endObject();
    }

    @Override
    public Person read(JsonReader in) throws IOException {
        String name = null;
        int age = 0;
        Date birthDate = null;

        in.beginObject();
        while (in.hasNext()) {
            String fieldName = in.nextName();
            if (fieldName.equals("name")) {
                name = in.nextString();
            } else if (fieldName.equals("age")) {
                age = in.nextInt();
            } else if (fieldName.equals("birthDate")) {
                String dateString = in.nextString();
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    birthDate = sdf.parse(dateString);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        in.endObject();

        return new Person(name, age, birthDate);
    }
}

4. TypeAdapter রেজিস্টার করা Gson-এ:

TypeAdapter তৈরি করার পর, আপনাকে GsonBuilder ব্যবহার করে এটি রেজিস্টার করতে হবে।

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    public static void main(String[] args) {
        // GsonBuilder দিয়ে কাস্টম TypeAdapter রেজিস্টার করা
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Person.class, new PersonTypeAdapter());
        Gson gson = gsonBuilder.create();

        // Person অবজেক্ট তৈরি
        Person person = new Person("John Doe", 30, new Date());

        // Person অবজেক্ট JSON এ কনভার্ট করা
        String json = gson.toJson(person);
        System.out.println(json);

        // JSON থেকে Person অবজেক্টে রূপান্তর করা
        String personJson = "{\"name\":\"John Doe\",\"age\":30,\"birthDate\":\"2024-12-19\"}";
        Person newPerson = gson.fromJson(personJson, Person.class);
        System.out.println(newPerson.getName() + ", " + newPerson.getAge());
    }
}

5. আউটপুট:

{
  "name": "John Doe",
  "age": 30,
  "birthDate": "2024-12-19"
}

6. কাস্টম TypeAdapter এর সুবিধা:

  • Serialization: PersonTypeAdapter ক্লাসে write মেথডটি কাস্টম JSON ফরম্যাট তৈরি করে, যেমন birthDate ফিল্ডটি কাস্টম ফরম্যাটে (yyyy-MM-dd) JSON-এ রূপান্তরিত হয়েছে।
  • Deserialization: read মেথডটি JSON থেকে Person অবজেক্টে কাস্টম ফরম্যাট অনুযায়ী রূপান্তর করে।

7. এটা কোথায় কাজে আসবে?

  • যখন আপনি একটি complex বা custom ডেটা ফরম্যাটের জন্য JSON তৈরি বা পার্স করতে চান।
  • যখন JSON ডেটার কিছু নির্দিষ্ট অংশ (যেমন, ডেটা ফরম্যাট) আপনাকে কাস্টমাইজ করতে হয়।
  • যখন আপনাকে ডেটা কনভার্ট করার সময় JSON ফরম্যাটে কিছু বিশেষ পরিবর্তন বা ম্যানিপুলেশন করতে হয়।
  • Gson এর Custom TypeAdapter খুবই শক্তিশালী এবং নমনীয় টুল, যা আপনাকে JSON কনভার্ট করার প্রক্রিয়াকে কাস্টমাইজ করতে দেয়।
  • TypeAdapter ক্লাসের মাধ্যমে আপনি Serialization এবং Deserialization উভয়ই কাস্টমাইজ করতে পারবেন, যার ফলে আপনি JSON ডেটা প্রক্রিয়া খুবই নিয়ন্ত্রিতভাবে করতে পারবেন।
Content added By
Promotion

Are you sure to start over?

Loading...