কম্পিউটার টিউটোরিয়াল

জ্যাকসনে @JsonView অ্যানোটেশনের গুরুত্ব

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)

  1. জাভাতে ডিফল্ট মেথড ব্যবহার করে ডায়ামন্ড সমস্যা সমাধান

  2. জাভাতে Boolean ক্লাসের গুরুত্ব

  3. জাভাতে Cursor ক্লাসের গুরুত্ব

  4. জাভাতে java.lang.Class-এর গুরুত্ব কী?