@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 → स्ट्रिंग)
सुरक्षा चेतावनी
बेहतर विकल्प (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 रिटर्न करता हो