@JsonRawValue অ্যানোটেশন মেথড এবং ফিল্ড দুটোতেই ব্যবহার করা যায় যাতে ফিল্ড বা প্রপার্টি ডিক্লেয়ার করা মোতাবিক সিরিয়ালাইজ হয়। উদাহরণস্বরূপ, যদি আমাদের জাভা ক্লাসে একটি স্ট্রিং ফিল্ড থাকে, তবে JSON ভ্যালু কোটেশন মার্কের (" ") ভিতরে থাকে। কিন্তু যখন আমরা ফিল্ডটিকে @JsonRawValue অ্যানোটেট করি, তবে জ্যাকসন লাইব্রেরি কোটেশন ওমিট করে।
সিনট্যাক্স
@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
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"}
}
ব্যবহার ক্ষেত্র
- পূর্বে সিরিয়ালাইজড JSON স্ট্রিং এম্বেড করতে
- র JSON ফরম্যাট ম্যানুয়ালি কন্ট্রোল করতে
- পারফরম্যান্স: বড় JSON স্ট্রিং রি-পার্স না করে সরাসরি এম্বেড করতে
সতর্কতা
- জ্যাকসন ভ্যালিড JSON চেক করে না - ভুল JSON দিলে ইনভ্যালিড আউটপুট হবে
- সিকিউরিটি রিস্ক: আউটপুট ইঞ্জেকশন সম্ভব যদি ইনপুট যাচাই না করা হয়
- সাধারণত এড়াতে ভালো, বরং POJO/Map ব্যবহার করুন