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

जावा में Jackson का उपयोग करके @JsonValue एनोटेशन कब उपयोग करें

@JsonValue एनोटेशन मेथड लेवल पर उपयोगी है। हम इस एनोटेशन का उपयोग जावा ऑब्जेक्ट से JSON स्ट्रिंग जनरेट करने के लिए कर सकते हैं। यदि हम सीरियलाइज्ड ऑब्जेक्ट को प्रिंट करना चाहते हैं तो toString() मेथड को ओवरराइड करते हैं। लेकिन @JsonValue एनोटेशन का उपयोग करके, हम उस तरीके को परिभाषित कर सकते हैं जिसमें जावा ऑब्जेक्ट सीरियलाइज होता है।

सिंटैक्स

@Target(value={ANNOTATION_TYPE,METHOD,FIELD})
@Retention(value=RUNTIME)
public @interface JsonValue

उदाहरण

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class JsonValueAnnotationTest {
    public static void main(String args[]) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writeValueAsString(new Student());
        System.out.println(jsonString);
    }
}

// Student क्लास
class Student {
    @JsonProperty
    private int studentId = 115;
    
    @JsonProperty
    private String studentName = "Sai Adithya";
    
    @JsonValue
    public String toJson() {
        return this.studentName + "," + this.studentId + "," + this.toString();
    }
    
    @Override
    public String toString() {
        return "Student[" + 
               "studentId = " + studentId + 
               ", studentName = " + studentName + 
               ']';
    }
}

आउटपुट

"Sai Adithya,115,Student[studentId = 115, studentName = Sai Adithya]"

बिना @JsonValue के आउटपुट

{
  "studentId" : 115,
  "studentName" : "Sai Adithya"
}

मुख्य बिंदु

  • सिंगल वैल्यू सीरियलाइजेशन: @JsonValue वाला मेथड ऑब्जेक्ट की पूरी JSON रिप्रेजेंटेशन निर्धारित करता है
  • टाइप फ्लेक्सिबिलिटी: रिटर्न टाइप String, Number, Boolean, Array, Object कुछ भी हो सकता है
  • टूस्ट्रिंग से अलग: toString() केवल लॉगिंग/डिबगिंग के लिए होता है, @JsonValue JSON सीरियलाइजेशन कंट्रोल करता है
  • एक क्लास में एक ही: एक क्लास में केवल एक मेथड @JsonValue से एनोटेटेड हो सकता है

उपयोग के मामले

  • कस्टम JSON फॉर्मेट (जैसे CSV स्टाइल स्ट्रिंग)
  • एनम वैल्यूज को स्पेसिफिक स्ट्रिंग/नंबर के रूप में सीरियलाइज करना
  • वैल्यू ऑब्जेक्ट्स (Value Objects) के लिए सरल रिप्रेजेंटेशन
  • थर्ड-पार्टी API कम्पैटिबिलिटी के लिए स्पेसिफिक फॉर्मेट

ध्यान दें

उदाहरण में दिखाया गया आउटपुट एक JSON स्ट्रिंग है (quotes के साथ), न कि JSON ऑब्जेक्ट। यह तब उपयोगी होता है जब API एक स्ट्रिंग वैल्यू एक्सपेक्ट करता हो न कि ऑब्जेक्ट।

  1. Java में pack() मेथड का उपयोग कब कर सकते हैं? Java में pack() मेथड का उपयोग कब कर सकते हैं?

    pack() मेथड Java में Window क्लास में परिभाषित है और यह फ्रेम को इस तरह आकार देता है कि इसकी सभी सामग्री उनके पसंदीदा आकार पर या उससे ऊपर हैं। pack() मेथड का एक विकल्प setSize() या setBounds() मेथड्स को कॉल करके फ्रेम आकार को स्पष्ट रूप से स्थापित करना है। सामान्य तौर पर, pack() मेथड का उपयोग setSiz

  1. - Java में fillInStackTrace() मेथड का उपयोग कब करें?

    fillInStackTrace() जावा में Throwable क्लास का एक महत्वपूर्ण मेथड है। स्टैक ट्रेस यह निर्धारित करने के लिए उपयोगी हो सकता है कि अपवाद वास्तव में कहां फेंका गया है। कुछ स्थितियां हो सकती हैं जहां हमें एक अपवाद को फिर से फेंकने और यह पता लगाने की आवश्यकता होती है कि इसे कहां रीथ्रो किया गया, हम ऐसे पर

  1. - Java में एब्सट्रैक्ट क्लास कब उपयोग करें और इंटरफेस कब उपयोग करें?

    एक इंटरफेस का उपयोग कॉन्ट्रैक्ट बिहेवियर को परिभाषित करने के लिए किया जा सकता है और यह दो सिस्टम्स के बीच इंटरैक्ट करने के लिए कॉन्ट्रैक्ट के रूप में भी कार्य कर सकता है जबकि एक एब्सट्रैक्ट क्लास मुख्य रूप से सबक्लासेस के लिए डिफ़ॉल्ट बिहेवियर को परिभाषित करने के लिए उपयोग की जाती है, इसका अर्थ है