কম্পিউটার টিউটোরিয়াল

জ্যাকসনে @JsonManagedReference এবং @JsonBackReference অ্যানোটেশন কখন ব্যবহার করবেন

@JsonManagedReference এবং @JsonBackReference অ্যানোটেশন ব্যবহার করে JSON স্ট্রাকচার বাই-ডাইরেকশনালভাবে তৈরি করা যায়। @JsonManagedReference অ্যানোটেশন একটি ফরওয়ার্ড রেফারেন্স যা সিরিয়ালাইজেশনের সময় ইনক্লুড হয়, অন্যদিকে @JsonBackReference অ্যানোটেশন একটি ব্যাক রেফারেন্স যা সিরিয়ালাইজেশনের সময় ওমিট হয়।

উদাহরণ

import java.util.*;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

public class ManagedReferenceBackReferenceTest {
    public static void main(String args[]) throws JsonProcessingException {
        BackReferenceBeanTest testBean = new BackReferenceBeanTest(110, "Sai Chaitanya");
        ManagedReferenceBeanTest bean = new ManagedReferenceBeanTest(135, "Adithya Ram", testBean);
        testBean.addEmployees(bean);
        
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(bean);
        System.out.println(jsonString);
    }
}

class ManagedReferenceBeanTest {
    public int empId = 115;
    public String empName = "Raja Ramesh";
    
    @JsonManagedReference
    public BackReferenceBeanTest manager;
    
    public ManagedReferenceBeanTest(int empId, String empName, BackReferenceBeanTest manager) {
        this.empId = empId;
        this.empName = empName;
        this.manager = manager;
    }
}

class BackReferenceBeanTest {
    public int empId = 125;
    public String empName = "Jai Dev";
    
    @JsonBackReference
    public List<ManagedReferenceBeanTest> list;
    
    public BackReferenceBeanTest(int empId, String empName) {
        this.empId = empId;
        this.empName = empName;
        list = new ArrayList<>();
    }
    
    public void addEmployees(ManagedReferenceBeanTest managedReferenceBeanTest) {
        list.add(managedReferenceBeanTest);
    }
}

আউটপুট

{
  "empId" : 135,
  "empName" : "Adithya Ram",
  "manager" : {
    "empId" : 110,
    "empName" : "Sai Chaitanya"
  }
}

কীভাবে কাজ করে

  • @JsonManagedReference: ফরওয়ার্ড লিংক, সিরিয়ালাইজেশনে ইনক্লুড
  • @JsonBackReference: ব্যাক লিংক, সিরিয়ালাইজেশনে ওমিট (সাইক্লিক রেফারেন্স এড়াতে)
  • ডিসিরিয়ালাইজেশনের সময় ব্যাক রেফারেন্স অটোমেটিকালি পপুলেট হয়

বিকল্প: @JsonIdentityInfo

জটিল গ্রাফের জন্য @JsonIdentityInfo (আইডি বেসড) বেশি ফ্লেক্সিবল। Managed/Back রেফারেন্স শুধু প্যারেন্ট-চাইল্ড রিলেশনশিপে ভালো কাজ করে।

  1. জাভাতে সিঙ্ক্রোনাইজড ব্লক কখন ব্যবহার করা উচিত?

  2. জাভাতে fillInStackTrace() মেথড কখন ব্যবহার করব

  3. জাভাতে কখন অ্যাবস্ট্রাক্ট ক্লাস এবং কখন ইন্টারফেস ব্যবহার করবেন?

  4. জাভাতে অ্যাবস্ট্রাক্ট মেথড এবং ক্লাস