Immutable Objects এর Serialization এবং Deserialization

Jackson এবং Immutable Objects - জ্যাকসন (Jackson) - Java Technologies

361

Java-তে Immutable Objects এমন ক্লাসগুলোর ইনস্ট্যান্স, যা একবার তৈরি হলে পরিবর্তন করা যায় না। Immutable ক্লাস তৈরির সাধারণ বৈশিষ্ট্যগুলোর মধ্যে থাকে:

  • ক্লাসটি final হওয়া।
  • ফিল্ডগুলো final হওয়া।
  • কোনো setter মেথড না থাকা।
  • কনস্ট্রাক্টর দিয়ে ফিল্ডগুলো নির্ধারণ করা।

Jackson লাইব্রেরি Immutable Objects-এর সাথে কাজ করতে পারে এবং যথাযথ পদ্ধতিতে Serialization ও Deserialization নিশ্চিত করে।


Serialization of Immutable Objects

Immutable Objects এর Serialization করা সহজ। Jackson স্বয়ংক্রিয়ভাবে Getter মেথডগুলো ব্যবহার করে JSON তৈরির জন্য।

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;

public class ImmutableSerializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // Immutable Object তৈরি
            ImmutableUser user = new ImmutableUser(1, "Rahim", "rahim@example.com");

            // Object থেকে JSON
            String json = objectMapper.writeValueAsString(user);

            System.out.println("Serialized JSON: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// Immutable Class
final class ImmutableUser {
    private final int id;
    private final String name;
    private final String email;

    public ImmutableUser(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

আউটপুট:

Serialized JSON: {"id":1,"name":"Rahim","email":"rahim@example.com"}

Deserialization of Immutable Objects

Deserialization করার সময় Jackson ডিফল্টভাবে ডিফল্ট কনস্ট্রাক্টর (no-args constructor) ব্যবহার করে এবং setter মেথড কল করে। কিন্তু Immutable Objects-এ এগুলো থাকে না।

এই সমস্যার সমাধানের জন্য আমরা @JsonCreator এবং @JsonProperty এনোটেশন ব্যবহার করতে পারি।


উদাহরণ:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ImmutableDeserializationExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // JSON String
            String json = "{\"id\":1,\"name\":\"Rahim\",\"email\":\"rahim@example.com\"}";

            // JSON থেকে Object
            ImmutableUser user = objectMapper.readValue(json, ImmutableUser.class);

            System.out.println("Deserialized User: " + user.getName() + " - " + user.getEmail());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// Immutable Class
final class ImmutableUser {
    private final int id;
    private final String name;
    private final String email;

    @JsonCreator
    public ImmutableUser(
        @JsonProperty("id") int id,
        @JsonProperty("name") String name,
        @JsonProperty("email") String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

আউটপুট:

Deserialized User: Rahim - rahim@example.com

গুরুত্বপূর্ণ পয়েন্ট

  1. Serialization:
    • Immutable Objects-এ getter মেথড থাকলেই Jackson JSON তৈরি করতে পারে।
    • ফিল্ডের অ্যাক্সেস সরাসরি প্রয়োজন হয় না।
  2. Deserialization:
    • ডিফল্ট কনস্ট্রাক্টর না থাকলে @JsonCreator ব্যবহার করতে হবে।
    • প্রতিটি ফিল্ডের জন্য @JsonProperty ব্যবহার করতে হবে।

Factory Method ব্যবহার করে Deserialization

আপনি Factory Method দিয়ে Immutable Object তৈরি করতে পারেন। এ ক্ষেত্রে @JsonCreator সরাসরি Factory Method-এর উপর প্রয়োগ করা হয়।

উদাহরণ:

final class ImmutableUser {
    private final int id;
    private final String name;
    private final String email;

    private ImmutableUser(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    @JsonCreator
    public static ImmutableUser createUser(
        @JsonProperty("id") int id,
        @JsonProperty("name") String name,
        @JsonProperty("email") String email) {
        return new ImmutableUser(id, name, email);
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getEmail() {
        return email;
    }
}

Record ব্যবহার করে Immutable Objects

Java 14+ থেকে, Records ব্যবহার করে সহজে Immutable Objects তৈরি করা যায়। Jackson Records-এর সাথে সহজেই কাজ করতে পারে।

উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;

public class RecordExample {
    public static void main(String[] args) {
        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // JSON String
            String json = "{\"id\":1,\"name\":\"Rahim\",\"email\":\"rahim@example.com\"}";

            // JSON থেকে Record Object
            UserRecord user = objectMapper.readValue(json, UserRecord.class);

            System.out.println("Deserialized User Record: " + user.name());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

record UserRecord(int id, String name, String email) {}

আউটপুট:

Deserialized User Record: Rahim

  1. Immutable Objects-এ Serialization স্বাভাবিকভাবে হয়, কারণ getter মেথড ব্যবহার হয়।
  2. Deserialization-এ @JsonCreator এবং @JsonProperty প্রয়োজন।
  3. Java 14+ এ Records ব্যবহার করে Immutable Objects তৈরি করা আরও সহজ।
  4. Factory Method এবং কনস্ট্রাক্টর দুই ক্ষেত্রেই Jackson সহজেই কাজ করতে পারে।
Content added By
Promotion

Are you sure to start over?

Loading...