@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 एक स्ट्रिंग वैल्यू एक्सपेक्ट करता हो न कि ऑब्जेक्ट।