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

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

@JsonRawValue एनोटेशन का उपयोग मेथड्स और फील्ड्स दोनों के लिए किया जा सकता है ताकि फील्ड या प्रॉपर्टी को घोषित अनुसार सीरियलाइज किया जा सके। उदाहरण के लिए, यदि हमारी जावा क्लास में एक String फील्ड है, तो JSON वैल्यू कोट्स ("") के भीतर संलग्न होती है। लेकिन जब हम फील्ड को @JsonRawValue एनोटेशन से एनोटेट करते हैं, तो Jackson लाइब्रेरी कोट्स को छोड़ देती है।

सिंटैक्स

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

उदाहरण

import com.fasterxml.jackson.annotation.JsonRawValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

public class JsonRawValueAnnotationTest {
    public static void main(String args[]) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Employee());
        System.out.println(jsonString);
    }
}

// Employee क्लास
class Employee {
    public int empId = 115;
    public String empName = "Sai Chaitanya";
    
    @JsonRawValue
    public String empAddress = "{\"doorNumber\": 1118, \"street\": \"IDPL Colony\", \"city\": \"Hyderabad\"}";
}

आउटपुट

{
  "empId" : 115,
  "empName" : "Sai Chaitanya",
  "empAddress" : {"doorNumber": 1118, "street": "IDPL Colony", "city": "Hyderabad"}
}

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

{
  "empId" : 115,
  "empName" : "Sai Chaitanya",
  "empAddress" : "{\"doorNumber\": 1118, \"street\": \"IDPL Colony\", \"city\": \"Hyderabad\"}"
}

मुख्य उपयोग के मामले

  • प्री-सीरियलाइज्ड JSON: जब फील्ड में पहले से वैलिड JSON स्ट्रिंग हो
  • कस्टम फॉर्मेटिंग: जब Jackson के डिफ़ॉल्ट सीरियलाइजेशन को बायपास करना हो
  • पार्स्ड JSON इंजेक्शन: JsonNode या ObjectNode को सीधे एम्बेड करना
  • परफॉरमेंस: डबल सीरियलाइजेशन से बचने के लिए (स्ट्रिंग → JSON → स्ट्रिंग)

सुरक्षा चेतावनी

⚠️ सावधानी: @JsonRawValue का उपयोग अनट्रस्टेड इनपुट के साथ न करें। यह JSON इंजेक्शन अटैक्स का कारण बन सकता है यदि स्ट्रिंग में मैलिशियस JSON हो। केवल ट्रस्टेड, वैलिडेटेड JSON स्ट्रिंग्स के साथ उपयोग करें।

बेहतर विकल्प (Jackson 2.7+)

// JsonRawValue के बजाय JsonNode/ObjectNode का उपयोग करें
class Employee {
    public int empId = 115;
    public String empName = "Sai Chaitanya";
    
    @JsonProperty("empAddress")
    public ObjectNode getAddressNode() {
        ObjectNode node = JsonNodeFactory.instance.objectNode();
        node.put("doorNumber", 1118);
        node.put("street", "IDPL Colony");
        node.put("city", "Hyderabad");
        return node;
    }
}

रिटर्न टाइप्स जो @JsonRawValue के साथ काम करते हैं

  • String (सबसे आम)
  • char[]
  • byte[] (बेस64 एनकोडेड के रूप में)
  • JsonNode / ObjectNode
  • किसी भी ऑब्जेक्ट जिसका toString() वैलिड JSON रिटर्न करता हो
  1. - Java में Jackson लाइब्रेरी का उपयोग करके तारीख को कैसे फॉर्मेट करें?

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

  1. - Java में Jackson का उपयोग करके JSON में फील्ड नाम को कैसे बदलें?

    Jackson एनोटेशन @JsonProperty का उपयोग सीरियलाइज़ेशन या डिसीरियलाइज़ेशन के दौरान किसी प्रॉपर्टी या मेथड पर JSON के लिए किया जाता है। यह एक वैकल्पिक name पैरामीटर लेता है जो उस मामले में उपयोगी होता है जब प्रॉपर्टी नाम JSON में key नाम से अलग होता है। डिफ़ॉल्ट रूप से, यदि key नाम प्रॉपर्टी नाम से मे

  1. - Java में StringWriter का महत्व क्या है?

    StringWriter क्लास Writer क्लास का एक सबक्लास है और यह स्ट्रिंग को आउटपुट स्ट्रीम में लिखता है। एक स्ट्रिंग लिखने के लिए, यह कैरेक्टर स्ट्रीम स्ट्रिंग को एक स्ट्रिंग बफ़र में एकत्र करता है और फिर एक स्ट्रिंग का निर्माण करता है। StringWriter का बफ़र डेटा के अनुसार स्वचालित रूप से बढ़ता है। StringWrit