@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