@JsonIdentityInfo অ্যানোটেশন ব্যবহার করা হয় যখন অবজেক্টের প্যারেন্ট-চাইল্ড রিলেশনশিপ থাকে জ্যাকসন লাইব্রেরিতে। এটি সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন প্রক্রিয়ায় অবজেক্ট আইডেন্টিটি নির্দেশ করতে ব্যবহৃত হয়। ObjectIdGenerators.PropertyGenerator একটি অ্যাবস্ট্রাক্ট প্লেসহোল্ডার ক্লাস যা নির্দেশ করে যে অবজেক্ট আইডেন্টিফায়ার POJO প্রপার্টি থেকে আসবে।
সিনট্যাক্স
@Target(value={ANNOTATION_TYPE,TYPE,FIELD,METHOD,PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonIdentityInfo
উদাহরণ
import java.util.*;
import java.io.*;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIdentityInfoTest {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
User user = new User(115, "Raja", "Ramesh");
Address address = new Address(125, "Madhapur", "Hyderabad", user);
user.addAddress(address);
String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(address);
System.out.println(jsonString);
}
}
// User class
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "userId")
class User {
private int userId;
private String firstName;
private String lastName;
private List<Address> addresses;
public User(int userId, String firstName, String lastName) {
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.addresses = new ArrayList<>();
}
public int getUserId() { return userId; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }
public void addAddress(Address address) { addresses.add(address); }
}
// Address class
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "userId")
class Address {
private int userId;
private String city;
private String street;
private User user;
public Address(int userId, String street, String city, User user) {
this.userId = userId;
this.street = street;
this.city = city;
this.user = user;
}
public int getUserId() { return userId; }
public String getStreet() { return street; }
public String getCity() { return city; }
public User getUser() { return user; }
}
আউটপুট
{
"userId" : 125,
"city" : "Hyderabad",
"street" : "Madhapur",
"user" : {
"userId" : 115,
"firstName" : "Raja",
"lastName" : "Ramesh"
}
}
কীভাবে কাজ করে
- প্রথমবার অবজেক্ট সিরিয়ালাইজ হলে পুরো অবজেক্ট লিখে
- দ্বিতীয়বার একই অবজেক্ট (সেম আইডি দিয়ে) রেফারেন্স হলে শুধু আইডি রেফারেন্স দেয়:
{"userId":115} - সাইক্লিক রেফারেন্স (প্যারেন্ট-চাইল্ড বাই-ডাইরেকশনাল) হ্যান্ডেল করে
আন্য জেনারেটর
- ObjectIdGenerators.IntSequenceGenerator - অটো-ইনক্রিমেন্ট ইন্টিজার আইডি
- ObjectIdGenerators.UUIDGenerator - UUID আইডি
- ObjectIdGenerators.PropertyGenerator - POJO প্রপার্টি থেকে আইডি (উপরের উদাহরণ)