@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
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]"
ব্যবহার ক্ষেত্র
- কাস্টম স্ট্রিং রিপ্রেজেন্টেশন জেনারেট করতে চাইলে
- এনাম বা ভ্যালু অবজেক্টকে সিম্পল JSON ভ্যালু (স্ট্রিং/নাম্বার) হিসেবে সিরিয়ালাইজ করতে
- toString()-এর পরিবর্তে JSON-স্পেসিফিক ফরম্যাট দরকার হলে
নোট
@JsonValue অ্যানোটেট করা মেথড অবশ্যই নন-স্ট্যাটিক এবং নন-ভয়ড রিটার্ন টাইপের হতে হবে। একটি ক্লাসে শুধু একটি @JsonValue মেথড থাকতে পারে।