Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में Jackson का उपयोग करके @JsonIdentityInfo एनोटेशन का महत्व

@JsonIdentityInfo एनोटेशन का उपयोग तब किया जाता है जब Jackson लाइब्रेरी में ऑब्जेक्ट का पेरेंट-चाइल्ड रिलेशनशिप होता है। @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 क्लास
@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 void addAddress(Address address) { addresses.add(address); }
}

// Address क्लास
@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;
    }
    
    // गेटर्स...
}

आउटपुट

{
  "userId" : 125,
  "city" : "Hyderabad",
  "street" : "Madhapur",
  "user" : {
    "userId" : 115,
    "firstName" : "Raja",
    "lastName" : "Ramesh"
  }
}

बिना @JsonIdentityInfo के आउटपुट (इनफिनाइट रिकर्सन)

com.fasterxml.jackson.databind.JsonMappingException: 
Infinite recursion (StackOverflowError)

ObjectIdGenerators के प्रकार

जनरेटर विवरण
PropertyGeneratorPOJO प्रॉपर्टी का उपयोग करता है (उदाहरण: id फील्ड)
IntSequenceGeneratorइंटीजर सीक्वेंस जनरेट करता है
UUIDGeneratorUUID जनरेट करता है
StringIdGeneratorस्ट्रिंग-आधारित ID
Noneकोई आइडेंटिटी नहीं (डिफ़ॉल्ट)

मुख्य एट्रिब्यूट्स

  • generator: ObjectIdGenerators का सबक्लास
  • property: ID के लिए उपयोग की जाने वाली प्रॉपर्टी का नाम (PropertyGenerator के लिए)
  • scope: आइडेंटिटी स्कोप (क्लास लेवल)
  • resolver: कस्टम रिज़ॉल्वर क्लास

कब उपयोग करें

  • बाईडायरेक्शनल रिलेशनशिप्स (पेरेंट-चाइल्ड, बाय-डायरेक्शनल असोसिएशन)
  • सर्कुलर रेफरेंसेज को रोकने के लिए
  • जब ऑब्जेक्ट ग्राफ में शेयर्ड रेफरेंसेज हों
  • डीसीरियलाइजेशन के दौरान ऑब्जेक्ट आइडेंटिटी बनाए रखने के लिए
  1. - Jackson लाइब्रेरी का उपयोग करके Java में XML को POJO में कैसे बदलें?

    JSON Jackson Java के लिए एक लाइब्रेरी है। इसमें बहुत शक्तिशाली डेटा बाइंडिंग क्षमताएं हैं और यह कस्टम Java ऑब्जेक्ट्स को JSON में सीरियलाइज़ करने और JSON को वापस Java ऑब्जेक्ट में डिसीरियलाइज़ करने के लिए एक फ्रेमवर्क प्रदान करता है। हम XmlMapper क्लास के readValue() मेथड का उपयोग करके XML फॉर्मेट

  1. - Java में Jackson लाइब्रेरी का उपयोग करके JSON को प्रिटी प्रिंट कैसे करें?

    Jackson API एक Java आधारित लाइब्रेरी है और यह Java ऑब्जेक्ट्स को JSON में और JSON को Java ऑब्जेक्ट में बदलने के लिए उपयोगी हो सकती है। Jackson API अन्य API से तेज़ है, कम मेमोरी क्षेत्र की आवश्यकता होती है और बड़े ऑब्जेक्ट्स के लिए अच्छी है। हम स्ट्रीमिंग API, ट्री मॉडल, और डेटा बाइंडिंग का उपयोग क

  1. - जावा में @Override एनोटेशन का महत्व?

    @Override एनोटेशन डिफ़ॉल्ट जावा एनोटेशन में से एक है और इसे जावा 1.5 वर्जन में पेश किया गया था। @Override एनोटेशन इंगित करता है कि चाइल्ड क्लास मेथड अपने बेस क्लास मेथड को ओवरराइड कर रहा है। @Override एनोटेशन दो कारणों से उपयोगी हो सकता है: यदि एनोटेटेड मेथड वास्तव में कुछ भी ओवरराइड नहीं करता है