JsonView অ্যানোটেশন সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন প্রক্রিয়ায় ডাইনামিক্যালি প্রপার্টি ইনক্লুড/এক্সক্লুড করতে ব্যবহৃত হয়। ObjectMapper ক্লাস কনফিগার করতে হয় যাতে writerWithView() মেথড ব্যবহার করে JSON লেখার সময় কোন ভিউ টাইপ ব্যবহার হবে।
সিনট্যাক্স
@Target(value={ANNOTATION_TYPE,METHOD,FIELD})
@Retention(value=RUNTIME)
public @interface JsonView
উদাহরণ
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.core.JsonProcessingException;
public class JsonViewAnnotationTest {
public static void main(String args[]) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonString = objectMapper.writerWithView(Views.Public.class).writeValueAsString(new Person());
String jsonStringInternal = objectMapper.writerWithView(Views.Internal.class).writeValueAsString(new Person());
System.out.println(jsonString);
System.out.println(jsonStringInternal);
}
}
// Person class
class Person {
@JsonView(Views.Public.class)
public long personId = 115;
@JsonView(Views.Public.class)
public String personName = "Raja Ramesh";
@JsonView(Views.Internal.class)
public String gender = "male";
@Override
public String toString() {
return "Person{personId=" + personId + ", personName='" + personName + "', gender='" + gender + "'}";
}
}
class Views {
static class Public {}
static class Internal extends Public {}
}
আউটপুট
{"personId":115,"personName":"Raja Ramesh"}
{"personId":115,"personName":"Raja Ramesh","gender":"male"}
কীভাবে কাজ করে
- ভিউ ক্লাসে ইনহেরিট্যান্স ব্যবহার:
Internal extends Public - Internal ভিউতে Public-এর সব ফিল্ড +.Internal-এ মানানসই ফিল্ডই থাকে
- writerWithView(Views.Internal.class) কল করলে উভয়ই আউটপুটে থাকে
ব্যবহার ক্ষেত্র
- পাবলিক API vs ইন্টারনাল API (সেনসিটিভ ডেটা হাইড)
- সামারি vs ডিটেইল ভিউ
- ভিন্ন ক্লায়েন্টের জন্য ভিন্ন রেসপন্স (মোবাইল vs ওয়েব)
নোট
ডিসিরিয়ালাইজেশনে ও কাজ করে: objectMapper.readerWithView(Views.Public.class).forType(Person.class).readValue(json)