@JsonAutoDetect একটি Jackson অ্যানোটেশন যা ক্লাস, ফিল্ড, মেথড ইত্যাদির JSON Serialization এবং Deserialization এর জন্য স্বয়ংক্রিয়ভাবে ভিজিবিলিটি নিয়ন্ত্রণ করে। Jackson ডিফল্টভাবে শুধুমাত্র public ফিল্ড এবং getter/setter মেথড গুলি JSON ডেটাতে মেটাচ্ছে। কিন্তু আপনি যদি চান যে private বা protected ফিল্ডগুলোও JSON ডেটাতে অন্তর্ভুক্ত হোক, তখন আপনি @JsonAutoDetect ব্যবহার করতে পারেন।
@JsonAutoDetect অ্যানোটেশন
@JsonAutoDetect অ্যানোটেশন ব্যবহার করে আপনি Jackson-কে নির্দিষ্ট করতে পারেন কোন ফিল্ড এবং মেথড JSON এ সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করতে হবে।
এটি visibility settings নির্ধারণ করতে ব্যবহৃত হয়, যেমন:
FIELD: ফিল্ড গুলি মাপ করা হবে।GETTER: গেটার মেথডের মাধ্যমে ফিল্ড গুলি মাপ করা হবে।SETTER: সেটার মেথডের মাধ্যমে ফিল্ড গুলি মাপ করা হবে।IS_GETTER: গেটার মেথডেisপ্যাটার্ন যুক্ত থাকলে এটি কনসিডার করবে (যেমনisActiveগেটার মেথড)।NONE: কোনও ক্ষেত্রই সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করা হবে না।
@JsonAutoDetect অ্যানোটেশন এর প্যারামিটার
| প্যারামিটার | বর্ণনা |
|---|---|
fieldVisibility | ফিল্ডের ভিজিবিলিটি কন্ট্রোল করার জন্য। |
getterVisibility | গেটার মেথডের ভিজিবিলিটি কন্ট্রোল করার জন্য। |
setterVisibility | সেটার মেথডের ভিজিবিলিটি কন্ট্রোল করার জন্য। |
creatorVisibility | ক্রিয়েটর মেথডের ভিজিবিলিটি কন্ট্রোল করার জন্য। |
@JsonAutoDetect এর ব্যবহার
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.ANY)
public class User {
private int id;
private String name;
private String email;
// Constructor
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getter and Setter Methods
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setEmail(String email) {
this.email = email;
}
}
Explanation:
fieldVisibility = Visibility.ANY: সব ধরনের ফিল্ড (private, protected, public) JSON-এ অন্তর্ভুক্ত হবে।getterVisibility = Visibility.NONE: Getter মেথডগুলো JSON-এ অন্তর্ভুক্ত হবে না।setterVisibility = Visibility.ANY: সব ধরনের setter মেথড JSON-এ অন্তর্ভুক্ত হবে।
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAutoDetectExample {
public static void main(String[] args) throws Exception {
User user = new User(1, "Rahim", "rahim@example.com");
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
}
}
JSON Output:
{
"id": 1,
"name": "Rahim",
"email": "rahim@example.com"
}
এখানে, name এবং email ফিল্ডগুলির জন্য গেটার মেথড থাকলেও, getterVisibility = Visibility.NONE থাকার কারণে গেটার মেথড ব্যবহার করা হয়নি, কিন্তু ফিল্ডগুলির মান Visibility.ANY থাকায় ফিল্ডের মান JSON-এ অন্তর্ভুক্ত হয়েছে।
@JsonAutoDetect এর ব্যবহার কেন প্রয়োজন?
- Private Fields: যদি আপনার ক্লাসে private ফিল্ড থাকে, তবে
@JsonAutoDetectব্যবহার করে আপনি সেই ফিল্ডগুলো JSON-এ অন্তর্ভুক্ত করতে পারবেন, যা সাধারণত Jackson public ফিল্ড বা getter/setter মেথডের মাধ্যমে হয়। - Custom Field Visibility: যখন আপনি চাইছেন যে JSON ফরম্যাটে কিছু ফিল্ড serializable না হোক, যেমন কিছু sensitive data (password বা token) এর ক্ষেত্রে
Visibility.NONEব্যবহার করতে পারেন। - Explicit Control: Serialization এবং Deserialization এর সময় আপনি ফিল্ড এবং মেথডের ভিজিবিলিটি নিয়ন্ত্রণ করে কোডের স্বচ্ছতা বজায় রাখতে পারেন।
@JsonAutoDetect এর অন্যান্য ব্যবহার
1. Field Visibility এবং Getter/Setter Visibility কাস্টমাইজ করা:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.PUBLIC_ONLY, setterVisibility = Visibility.NONE)
public class Product {
private int id;
private String name;
private double price;
// Constructor
public Product(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
// Getter Methods (Only public getters will be serialized)
public int getId() {
return id;
}
public String getName() {
return name;
}
// Setter Methods (No setters will be serialized)
public void setPrice(double price) {
this.price = price;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAutoDetectExample {
public static void main(String[] args) throws Exception {
Product product = new Product(1, "Laptop", 1500.0);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output:
{
"id": 1,
"name": "Laptop"
}
এখানে, price ফিল্ডের জন্য কোনো setter/ getter মেথড JSON-এ অন্তর্ভুক্ত হয়নি কারণ setterVisibility = Visibility.NONE দেওয়া হয়েছে, এবং শুধুমাত্র public getter মেথড JSON-এ অন্তর্ভুক্ত হয়েছে।
@JsonAutoDetectঅ্যানোটেশন Jackson-এ ফিল্ড এবং মেথডের ভিজিবিলিটি কাস্টমাইজ করতে সহায়তা করে।- এটি ব্যবহার করে আপনি private বা protected ফিল্ডগুলোকেও JSON-এ অন্তর্ভুক্ত করতে পারেন, যা সাধারণভাবে public ফিল্ডের জন্য সীমাবদ্ধ।
- Getter/Setter visibility কাস্টমাইজ করার মাধ্যমে আপনি JSON Serialization এবং Deserialization এর জন্য আরও সঠিক কনফিগারেশন করতে পারেন।
@JsonAutoDetect Jackson অ্যানোটেশনটি field visibility কনফিগার করতে ব্যবহৃত হয়। এটি একটি ক্লাস বা ফিল্ডের প্রপার্টি বা মেথডকে JSON Serialization এবং Deserialization-এর জন্য দৃশ্যমান বা অদৃশ্যমান করতে ব্যবহৃত হয়। সাধারণত, Jackson ডিফল্টভাবে public ফিল্ড এবং getter/setter মেথডগুলি সিরিয়ালাইজ করে, তবে @JsonAutoDetect দিয়ে আপনি ফিল্ডের ভিজিবিলিটি কাস্টমাইজ করতে পারেন।
@JsonAutoDetect Annotation-এর প্যারামিটার
@JsonAutoDetect অ্যানোটেশনের বেশ কিছু প্যারামিটার রয়েছে, যা আপনি কনফিগার করতে পারেন:
| প্যারামিটার | বর্ণনা |
|---|---|
fieldVisibility | ফিল্ডের visibility কনফিগার করতে ব্যবহৃত হয়। |
getterVisibility | getter মেথডের visibility কনফিগার করতে ব্যবহৃত হয়। |
setterVisibility | setter মেথডের visibility কনফিগার করতে ব্যবহৃত হয়। |
isGetterVisibility | is প্রিফিক্স থাকা মেথডগুলোর 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 এর সুবিধা:
- Fine-Grained Control over Field Visibility:
- আপনি নির্ধারণ করতে পারেন কোন ফিল্ড, মেথড JSON-এ সিরিয়ালাইজ হবে এবং কোনটি নয়।
- Flexible Object Serialization:
- Jackson-এর ডিফল্ট behavior পরিবর্তন করে আপনি সম্পূর্ণ কাস্টম Serialization এবং Deserialization করতে পারেন।
- Cleaner Code:
- আপনি getter/setter মেথড না লিখেও ফিল্ডগুলোকে JSON-এ অন্তর্ভুক্ত করতে পারেন, যদি
@JsonAutoDetectএর মাধ্যমেfieldVisibilityসঠিকভাবে কনফিগার করা হয়।
- আপনি getter/setter মেথড না লিখেও ফিল্ডগুলোকে JSON-এ অন্তর্ভুক্ত করতে পারেন, যদি
@JsonAutoDetectঅ্যানোটেশন ব্যবহার করে আপনি Jackson Serialization-এর সময় ফিল্ড, getter, এবং setter মেথডগুলোর visibility কাস্টমাইজ করতে পারেন।- এটি field visibility, getter visibility, এবং setter visibility কনফিগার করতে সাহায্য করে, যাতে আপনি JSON প্রক্রিয়া আরও নির্ভুলভাবে কাস্টমাইজ করতে পারেন।
- Performance এবং Code Simplicity এর জন্য এটি খুবই কার্যকর, কারণ আপনি কোডের লজিক পরিবর্তন না করে, JSON serialization এবং deserialization-এ আরও নিয়ন্ত্রণ পেতে পারেন।
Jackson লাইব্রেরিতে, আপনি JSON Serialization এবং Deserialization প্রক্রিয়ায় field, getter, এবং setter-এর visibility কাস্টমাইজ করতে পারেন। এই কাস্টমাইজেশনটি কার্যকরী যখন আপনি চান যে কিছু ফিল্ড শুধুমাত্র getter বা setter এর মাধ্যমে দেখানো হোক বা অদৃশ্য থাকুক।
Jackson-এর কিছু অ্যানোটেশন এবং কনফিগারেশন আছে যা আপনাকে এই visibility কাস্টমাইজ করার সুযোগ দেয়।
Visibility কাস্টমাইজ করার জন্য Jackson এর অ্যানোটেশন এবং কনফিগারেশন:
@JsonProperty: ফিল্ড বা মেথডের জন্য কাস্টম visibility নির্ধারণ করতে ব্যবহৃত হয়।@JsonIgnore: একটি ফিল্ড বা মেথডকে Serialization/Deserialization থেকে বাদ দিতে ব্যবহৃত হয়।@JsonAutoDetect: এটি ক্লাস বা ObjectMapper-এর ক্ষেত্রে getter, setter, field visibility কাস্টমাইজ করতে ব্যবহৃত হয়।@JsonInclude: JSON-এ কেবলমাত্র নির্দিষ্ট শর্তে ফিল্ডগুলো অন্তর্ভুক্ত করতে ব্যবহৃত হয়।
1. @JsonAutoDetect Annotation
@JsonAutoDetect অ্যানোটেশন ব্যবহার করে আপনি getter, setter, এবং field-এর visibility কাস্টমাইজ করতে পারেন। এটি ObjectMapper-এ global ভাবে ব্যবহার করা যেতে পারে, অথবা একটি নির্দিষ্ট ক্লাসে ব্যবহার করা যেতে পারে।
Visibility Levels:
JsonAutoDetect.Visibility.ANY: সকল ফিল্ড ও মেথড visible হবে।JsonAutoDetect.Visibility.NON_PRIVATE: শুধুমাত্র public এবং protected ফিল্ড/মেথড visible হবে।JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC: public এবং protected ফিল্ড/মেথড visible হবে।JsonAutoDetect.Visibility.NONE: সব ফিল্ড এবং মেথড hidden থাকবে।
Example:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NON_PRIVATE)
public class Person {
private String name; // Field will be included in JSON serialization
private int age; // Field will be included in JSON serialization
private String address; // Not visible in JSON
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
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;
}
// Getter and Setter for address are private, so this field will not be visible in JSON
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAutoDetectExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", 30, "1234 Elm St");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John",
"age": 30
}
- এখানে,
addressফিল্ডটি private থাকার কারণে JSON-এ অন্তর্ভুক্ত হয়নি, এবং getter মেথডটিNONEvisibility-এ থাকায়nameএবংageগেটারের মাধ্যমে serialization হয়েছে।
2. @JsonProperty Annotation
@JsonProperty ব্যবহার করে আপনি নির্দিষ্ট getter অথবা setter মেথডের visibility কাস্টমাইজ করতে পারেন। এটি একটি নির্দিষ্ট ফিল্ডের জন্য serialization এবং deserialization নিয়ন্ত্রণ করে।
Example:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
private String name;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
public Person(String name, String password) {
this.name = name;
this.password = password;
}
@JsonProperty
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonPropertyExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", "password123");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
passwordফিল্ডটিWRITE_ONLYvisibility-এ সেট করা হয়েছে, যার ফলে serialization সময়passwordফিল্ডটি JSON-এ অন্তর্ভুক্ত হয়নি, তবে deserialization সময় তা কাজ করবে।
3. @JsonInclude Annotation
@JsonInclude অ্যানোটেশন JSON serialization-এর সময় কিছু ফিল্ড বাদ দিতে ব্যবহৃত হয়, উদাহরণস্বরূপ null বা empty values। আপনি JsonInclude.Include.NON_NULL বা JsonInclude.Include.NON_EMPTY ব্যবহার করতে পারেন।
Example:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
private String name;
private String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIncludeExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", null);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
addressফিল্ডটি null হওয়ায় সেটি JSON-এ অন্তর্ভুক্ত হয়নি, কারণ@JsonInclude(JsonInclude.Include.NON_NULL)ব্যবহার করা হয়েছে।
4. @JsonIgnore Annotation
@JsonIgnore অ্যানোটেশনটি একটি ফিল্ড বা মেথডকে Serialization এবং Deserialization থেকে বাদ দেয়। এটি তখন ব্যবহৃত হয় যখন কোনো নির্দিষ্ট ফিল্ড JSON-এ শো করতে না চান।
Example:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Person {
private String name;
@JsonIgnore
private String password;
public Person(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIgnoreExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", "password123");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
passwordফিল্ডটি@JsonIgnoreব্যবহার করার কারণে JSON-এ অন্তর্ভুক্ত হয়নি।
@JsonAutoDetectঅ্যানোটেশনটি ফিল্ড, getter, এবং setter visibility কাস্টমাইজ করতে ব্যবহৃত হয়।@JsonPropertyব্যবহার করে ফিল্ড বা মেথডের visibility নিয়ন্ত্রণ করা যায়।@JsonIncludeএবং@JsonIgnoreJSON Serialization নিয়ন্ত্রণে সহায়তা করে।- Visibility Control ব্যবহার করে আপনি JSON আউটপুট পরিষ্কার এবং কাস্টমাইজড করতে পারেন, যা API এর জন্য উপকারী।
Jackson-এর এই অ্যানোটেশনগুলো ব্যবহার করে আপনি JSON Serialization এবং Deserialization আরও ফ্লেক্সিবল এবং দক্ষভাবে কাস্টমাইজ করতে পারবেন।
@JsonAutoDetect হল Jackson-এর একটি অ্যানোটেশন যা ক্লাসের ফিল্ডের অ্যাক্সেসিবিলিটি (visibility) নির্ধারণ করে। এটি ব্যবহারকারীদের JSON প্রক্রিয়াকরণের সময় ক্লাসের কোন ফিল্ড বা মেথড গুলি সন্নিবেশ বা রিড হতে পারবে তা কাস্টমাইজ করতে সাহায্য করে। সাধারণত, Jackson শুধুমাত্র public ফিল্ড বা getter/setter methods থেকে ডেটা প্রক্রিয়া করে। তবে @JsonAutoDetect ব্যবহার করে আপনি private ফিল্ড বা methods কে JSON Serialization এবং Deserialization এর জন্য প্রাপ্ত করতে পারেন।
@JsonAutoDetect এর বৈশিষ্ট্য:
- visibility: JSON ডেটার জন্য কোন ফিল্ড বা মেথডগুলিকে দেখা যাবে (এটি মূলত access modifiers এর উপর নির্ভর করে)।
- getter, setter, field ইত্যাদি ফিল্ডের visibility কাস্টমাইজ করতে পারে।
@JsonAutoDetect প্যারামিটারসমূহ
| প্যারামিটার | বর্ণনা |
|---|---|
| fieldVisibility | ফিল্ডগুলির দৃশ্যমানতা কিভাবে হবে (e.g., ANY, PUBLIC_ONLY) |
| getterVisibility | Getter মেথডের দৃশ্যমানতা |
| setterVisibility | Setter মেথডের দৃশ্যমানতা |
| isGetterVisibility | is-methods এর দৃশ্যমানতা |
@JsonAutoDetect এর উদাহরণ
ধরা যাক, আমাদের একটি Person ক্লাস রয়েছে, যেখানে private ফিল্ড রয়েছে এবং আমরা এই ফিল্ডগুলোকে JSON আউটপুটে প্রকাশ করতে চাই।
Step 1: @JsonAutoDetect এর ব্যবহার
import com.fasterxml.jackson.annotation.JsonAutoDetect;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class Person {
private String name;
private int age;
// Private Constructor
private Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter Methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
এই ক্ষেত্রে, @JsonAutoDetect অ্যানোটেশনটি fieldVisibility প্যারামিটার দিয়ে private ফিল্ডগুলোর দৃশ্যমানতা কাস্টমাইজ করছে। এখানে Visibility.ANY সেট করা হয়েছে, যার মানে হল যে সব ফিল্ডই JSON-এ প্রকাশিত হবে।
Step 2: Person অবজেক্ট Serializing
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAutoDetectExample {
public static void main(String[] args) throws Exception {
Person person = new Person("Rahim", 30);
// Create ObjectMapper instance
ObjectMapper objectMapper = new ObjectMapper();
// Serialize Person object to JSON
String jsonString = objectMapper.writeValueAsString(person);
// Print the JSON string
System.out.println(jsonString);
}
}
Output (Serialized JSON):
{
"name": "Rahim",
"age": 30
}
এখানে, @JsonAutoDetect এর সাহায্যে private ফিল্ড name এবং age JSON আউটপুটে উপস্থিত হয়েছে, যদিও ফিল্ডগুলি private ছিল।
@JsonAutoDetect এর অন্যান্য Visibility সেটিংস
Visibility.PUBLIC_ONLY
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class Person {
public String name;
public int age;
// Constructor, Getter Methods
}
Visibility.PUBLIC_ONLY ব্যবহার করলে শুধুমাত্র public ফিল্ড এবং মেথডই JSON-এ রিড হবে। যদি private ফিল্ড থাকে, সেগুলি JSON আউটপুটে দেখা যাবে না।
Visibility.NON_PRIVATE
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NON_PRIVATE)
public class Person {
private String name;
public int age;
// Constructor, Getter Methods
}
Visibility.NON_PRIVATE ব্যবহারে private ফিল্ড বাদে সমস্ত public এবং protected ফিল্ডগুলো JSON-এ সিরিয়ালাইজ হবে।
Visibility.ANY
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class Person {
private String name;
private int age;
// Constructor, Getter Methods
}
Visibility.ANY ব্যবহারে সমস্ত ফিল্ড private, protected, public সহ সমস্ত ফিল্ড JSON-এ সিরিয়ালাইজ হবে।
@JsonAutoDetect ব্যবহার করে Getter এবং Setter-র visibility কাস্টমাইজ করা
Getter/Setter Visibility পরিবর্তন করা
@JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY)
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
এখানে, getterVisibility = JsonAutoDetect.Visibility.PUBLIC_ONLY ব্যবহৃত হয়েছে, যার মাধ্যমে শুধুমাত্র public getter মেথড গুলি JSON-এ সিরিয়ালাইজ হবে। private অথবা protected getter মেথডগুলি JSON আউটপুটে দেখাবে না।
@JsonAutoDetect এর সুবিধা
- Custom Serialization:
- private ফিল্ড এবং methods JSON-এ সিরিয়ালাইজ বা ডেসিরিয়ালাইজ করার জন্য সুবিধা।
- Visibility Control:
- আপনি getter/setter মেথড, fields বা methods এর visibility কাস্টমাইজ করতে পারবেন, যা আপনার JSON আউটপুট নিয়ন্ত্রণে সহায়ক।
- Compatibility:
- Jackson JSON Serialization/Deserialization-এর জন্য legacy Java classes (যতটা সম্ভব)
getter/setterমেথড না থাকলেও সহজেই কাজ করবে।
- Jackson JSON Serialization/Deserialization-এর জন্য legacy Java classes (যতটা সম্ভব)
@JsonAutoDetectঅ্যানোটেশন Jackson এ JSON-এ কিভাবে ফিল্ড, getter, এবং setter মেথডগুলো প্রদর্শিত হবে তা নিয়ন্ত্রণ করতে সহায়তা করে।- এটি private, protected, বা public ফিল্ড ও মেথডগুলির visibility কাস্টমাইজ করার জন্য উপকারী।
- Jackson এর JSON ফরম্যাটিং প্রক্রিয়াকে আরও নমনীয় এবং কাস্টমাইজড করতে
@JsonAutoDetectব্যবহার করুন।
Read more