@JsonAutoDetect এর মাধ্যমে field visibility কনফিগার করা

@JsonAutoDetect এবং Field Visibility - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

296

@JsonAutoDetect Jackson অ্যানোটেশনটি field visibility কনফিগার করতে ব্যবহৃত হয়। এটি একটি ক্লাস বা ফিল্ডের প্রপার্টি বা মেথডকে JSON Serialization এবং Deserialization-এর জন্য দৃশ্যমান বা অদৃশ্যমান করতে ব্যবহৃত হয়। সাধারণত, Jackson ডিফল্টভাবে public ফিল্ড এবং getter/setter মেথডগুলি সিরিয়ালাইজ করে, তবে @JsonAutoDetect দিয়ে আপনি ফিল্ডের ভিজিবিলিটি কাস্টমাইজ করতে পারেন।


@JsonAutoDetect Annotation-এর প্যারামিটার

@JsonAutoDetect অ্যানোটেশনের বেশ কিছু প্যারামিটার রয়েছে, যা আপনি কনফিগার করতে পারেন:

প্যারামিটারবর্ণনা
fieldVisibilityফিল্ডের visibility কনফিগার করতে ব্যবহৃত হয়।
getterVisibilitygetter মেথডের visibility কনফিগার করতে ব্যবহৃত হয়।
setterVisibilitysetter মেথডের visibility কনফিগার করতে ব্যবহৃত হয়।
isGetterVisibilityis প্রিফিক্স থাকা মেথডগুলোর visibility কনফিগার করতে ব্যবহৃত হয়।

Visibility কনস্ট্যান্ট:

  • Visibility.ANY: কোনো visibility সীমাবদ্ধতা থাকবে না, সব কিছু visible হবে।
  • Visibility.NONE: সবকিছু invisible থাকবে।
  • Visibility.NON_PRIVATE: non-private ফিল্ড এবং মেথড visible থাকবে।
  • Visibility.PUBLIC_ONLY: শুধু public ফিল্ড এবং মেথড visible থাকবে।

প্র্যাকটিক্যাল উদাহরণ:

ধরা যাক, আমাদের একটি Person ক্লাস রয়েছে, যার কিছু ফিল্ড private এবং কিছু ফিল্ড public রয়েছে। আমরা @JsonAutoDetect ব্যবহার করে visibility কনফিগার করব।

Person ক্লাস:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class Person {
    private String name;
    private int age;
    public String address;  // public field will be serialized

    // Constructor
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    // Getters and Setters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAutoDetectExample {
    public static void main(String[] args) throws Exception {
        // Create a Person object
        Person person = new Person("John Doe", 30, "1234 Elm St");

        // Serialize using Jackson
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(person);

        System.out.println(json);
    }
}
JSON Output:
{
  "name": "John Doe",
  "age": 30,
  "address": "1234 Elm St"
}

ব্যাখ্যা:

  • @JsonAutoDetect(fieldVisibility = Visibility.ANY): এর মাধ্যমে সমস্ত ফিল্ড (private, protected, public) JSON-এ সিরিয়ালাইজ হবে।
  • getterVisibility = Visibility.NONE এবং setterVisibility = Visibility.NONE: এর মাধ্যমে getter এবং setter মেথডগুলি JSON সিরিয়ালাইজেশনে অংশ নেবে না।

এখানে, name এবং age প্রপার্টি private ছিল, কিন্তু যেহেতু তাদের জন্য getter/setter মেথড ছিল, Jackson তাদের দেখতে পেত। তবে address ফিল্ড public ছিল, তাই সেটি সরাসরি JSON আউটপুটে দেখা গেছে।


@JsonAutoDetect এর বিভিন্ন কনফিগারেশন:

১. Public Fields Only Visible

@JsonAutoDetect(fieldVisibility = Visibility.PUBLIC_ONLY)
public class Person {
    public String name;
    private int age;
    private String address;

    // Constructor, Getters and Setters
}

এখানে, শুধু public ফিল্ড (name) JSON আউটপুটে দেখা যাবে। private ফিল্ডগুলি (age, address) JSON-এ আসবে না।

২. Non-Private Fields Visible

@JsonAutoDetect(fieldVisibility = Visibility.NON_PRIVATE)
public class Person {
    private String name;
    protected int age;
    public String address;

    // Constructor, Getters and Setters
}

এখানে, private ফিল্ড (name) ছাড়া, সব ফিল্ড (protected, public) JSON আউটপুটে থাকবে। protected এবং public ফিল্ড (age, address) visible হবে, কিন্তু private ফিল্ড (name) JSON আউটপুটে আসবে না।

৩. Getter এবং Setter Visible না করা

@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class Person {
    private String name;
    private int age;

    // Constructor, Getters, Setters
}

এখানে, getter এবং setter মেথডগুলিকে JSON Serialization থেকে বাদ দেওয়া হয়েছে। এর ফলে শুধুমাত্র field এর মান JSON-এ থাকবে, getter বা setter-এর মাধ্যমে তাদের মান পরিবর্তন বা সিরিয়ালাইজ হবে না।


@JsonAutoDetect এর সুবিধা:

  1. Fine-Grained Control over Field Visibility:
    • আপনি নির্ধারণ করতে পারেন কোন ফিল্ড, মেথড JSON-এ সিরিয়ালাইজ হবে এবং কোনটি নয়।
  2. Flexible Object Serialization:
    • Jackson-এর ডিফল্ট behavior পরিবর্তন করে আপনি সম্পূর্ণ কাস্টম Serialization এবং Deserialization করতে পারেন।
  3. Cleaner Code:
    • আপনি getter/setter মেথড না লিখেও ফিল্ডগুলোকে JSON-এ অন্তর্ভুক্ত করতে পারেন, যদি @JsonAutoDetect এর মাধ্যমে fieldVisibility সঠিকভাবে কনফিগার করা হয়।

  • @JsonAutoDetect অ্যানোটেশন ব্যবহার করে আপনি Jackson Serialization-এর সময় ফিল্ড, getter, এবং setter মেথডগুলোর visibility কাস্টমাইজ করতে পারেন।
  • এটি field visibility, getter visibility, এবং setter visibility কনফিগার করতে সাহায্য করে, যাতে আপনি JSON প্রক্রিয়া আরও নির্ভুলভাবে কাস্টমাইজ করতে পারেন।
  • Performance এবং Code Simplicity এর জন্য এটি খুবই কার্যকর, কারণ আপনি কোডের লজিক পরিবর্তন না করে, JSON serialization এবং deserialization-এ আরও নিয়ন্ত্রণ পেতে পারেন।
Content added By
Promotion

Are you sure to start over?

Loading...