Practical উদাহরণ সহ Object Identity এর ব্যবহার

@JsonIdentityInfo এবং Object Identity - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

328

Jackson-এর @JsonIdentityInfo অ্যানোটেশন একটি গুরুত্বপূর্ণ টুল, যা Object Identity হ্যান্ডেল করার জন্য ব্যবহৃত হয়। এটি বিশেষত Circular References বা Self-referencing অবজেক্টের ক্ষেত্রে গুরুত্বপূর্ণ। Object Identity এর মাধ্যমে, আপনি Jackson-কে বলতে পারেন যে একই অবজেক্টকে একাধিক স্থানে ব্যবহার করার সময়ে, এটি একটি unique identifier ব্যবহার করে সংরক্ষণ করবে, যা infinite recursion এড়াতে সাহায্য করে।


@JsonIdentityInfo কী?

Jackson এর @JsonIdentityInfo অ্যানোটেশন আপনাকে JSON এর মধ্যে object গুলোর identity সঠিকভাবে ট্র্যাক করতে সাহায্য করে। এর মাধ্যমে, object references কে unique id দিয়ে চিহ্নিত করা হয়, যাতে একই অবজেক্ট বারবার JSON এ serialize না হয়।

  • @JsonIdentityInfo একটি ObjectIdGenerators ব্যবহার করে object গুলোর জন্য একটি ইউনিক আইডেন্টিফায়ার তৈরি করে।
  • এটি circular references বা bidirectional references সঠিকভাবে serialize করতে ব্যবহৃত হয়, যেখানে একটি অবজেক্ট অন্য একটি অবজেক্টকে রেফার করে এবং সেই অবজেক্ট আবার প্রথম অবজেক্টটিকে রেফার করে।

@JsonIdentityInfo ব্যবহার করার জন্য উদাহরণ

ধরা যাক আমাদের একটি Parent এবং Child ক্লাস রয়েছে, যেখানে bidirectional references রয়েছে।

1. Parent এবং Child ক্লাস তৈরি করুন:

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Parent {
    private int id;
    private String name;

    private Child child;

    // Constructors, Getters, and Setters
    public Parent(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Child getChild() {
        return child;
    }

    public void setChild(Child child) {
        this.child = child;
    }
}

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Child {
    private int id;
    private String name;

    private Parent parent;

    // Constructors, Getters, and Setters
    public Child(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Parent getParent() {
        return parent;
    }

    public void setParent(Parent parent) {
        this.parent = parent;
    }
}

2. Serialization Example:

এখন, আমরা Parent এবং Child অবজেক্ট তৈরি করব এবং Jackson ব্যবহার করে এগুলোকে JSON-এ serialize করব।

import com.fasterxml.jackson.databind.ObjectMapper;

public class ObjectIdentityExample {
    public static void main(String[] args) throws Exception {
        Parent parent = new Parent(1, "Rahim");
        Child child = new Child(2, "Rita");

        parent.setChild(child);
        child.setParent(parent);

        // ObjectMapper initialization
        ObjectMapper objectMapper = new ObjectMapper();

        // Serialization
        String json = objectMapper.writeValueAsString(parent);

        System.out.println(json);
    }
}

3. JSON Output:

{
  "id": 1,
  "name": "Rahim",
  "child": {
    "id": 2,
    "name": "Rita",
    "parent": 1
  }
}

ব্যাখ্যা:

  • এখানে @JsonIdentityInfo ব্যবহার করা হয়েছে Parent এবং Child ক্লাসের জন্য। এতে parent অবজেক্টের মধ্যে child অবজেক্টের রেফারেন্স রয়েছে, এবং child অবজেক্টেও আবার parent অবজেক্টের রেফারেন্স রয়েছে।
  • Jackson @JsonIdentityInfo এর মাধ্যমে id ফিল্ডটি ব্যবহার করে parent এবং child অবজেক্টগুলোর রেফারেন্স সঠিকভাবে ট্র্যাক করেছে এবং infinite recursion এড়ানো হয়েছে।

@JsonIdentityInfo এর বিভিন্ন Configuration

1. Object Identity-এ Custom ID Generator ব্যবহার:

Jackson ডিফল্টভাবে PropertyGenerator ব্যবহার করে object identity তৈরি করে, তবে আপনি কাস্টম ID Generator ব্যবহার করতে পারেন।

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "id")

এটি int sequence অনুসারে object identity তৈরি করবে।

2. @JsonIdentityInfo এর সঙ্গে @JsonBackReference ব্যবহার:

Bidirectional Relationship এর জন্য, আপনি @JsonBackReference এবং @JsonManagedReference একসঙ্গে ব্যবহার করতে পারেন।

@JsonBackReference
private Parent parent;

@JsonManagedReference
private Child child;

এই অ্যানোটেশনগুলির সাহায্যে, আপনি সহজেই Circular Reference সমাধান করতে পারেন।


@JsonIdentityInfo এর সুবিধা

  1. Circular References সমাধান:
    • যখন Parent এবং Child অবজেক্ট একে অপরকে রেফার করে, তখন এটি infinite recursion থেকে রক্ষা করে।
  2. Efficient Object Mapping:
    • একই অবজেক্ট একাধিকবার JSON এ উপস্থিত হলে, তা unique identifier হিসেবে ব্যবহার করা হয়, যাতে একাধিক রেফারেন্সে একই অবজেক্টের তথ্য বারবার না আসে।
  3. Serialization এবং Deserialization এর জন্য Data Integrity:
    • object identity ব্যবহার করে একই অবজেক্টের জন্য একাধিক reference manage করা যায় এবং সঠিকভাবে সেগুলোকে map করা যায়।

  1. @JsonIdentityInfo অ্যানোটেশন Jackson-এ Object Identity হ্যান্ডল করতে ব্যবহৃত হয় এবং Circular Reference সমস্যা সমাধান করে।
  2. Bidirectional References (যেমন Parent-Child relationships) সঠিকভাবে handle করার জন্য এটি অত্যন্ত কার্যকর।
  3. Custom Object Identity তৈরি করার জন্য কাস্টম ID Generators ব্যবহার করা যেতে পারে।
  4. Jackson অ্যানোটেশনগুলি complex object mapping এর ক্ষেত্রে কার্যকর এবং infinite recursion বা Circular Reference এড়াতে সাহায্য করে।
Content added By
Promotion

Are you sure to start over?

Loading...