Jackson-এ JSON serialization এবং deserialization-এর সময় কাস্টম Getter এবং Setter মেথড ব্যবহার করার জন্য নির্দিষ্ট অ্যানোটেশন রয়েছে। এগুলো দিয়ে JSON এবং Java Object-এর মধ্যে কাস্টম ম্যাপিং তৈরি করা যায়।
1. Custom Getter Methods
1.1 @JsonGetter
@JsonGetterএকটি নির্দিষ্ট মেথডকে JSON প্রপার্টি হিসেবে Serialize করার জন্য ব্যবহার করা হয়।- এটি ডিফল্ট Getter মেথডের (যেমন,
getName) বিকল্প হিসেবে কাজ করে।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonGetter;
public class User {
private String name;
public User(String name) {
this.name = name;
}
@JsonGetter("user_name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Serialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonGetterExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice");
// Serialize
String json = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + json);
}
}
JSON আউটপুট:
{
"user_name": "Alice"
}
2. Custom Setter Methods
2.1 @JsonSetter
@JsonSetterএকটি নির্দিষ্ট মেথডকে JSON প্রপার্টি হিসেবে Deserialize করার জন্য ব্যবহার করা হয়।- এটি ডিফল্ট Setter মেথডের (যেমন,
setName) বিকল্প হিসেবে কাজ করে।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonSetter;
public class User {
private String name;
public String getName() {
return name;
}
@JsonSetter("user_name")
public void setName(String name) {
this.name = name;
}
}
Deserialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonSetterExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"user_name\":\"Alice\"}";
// Deserialize
User user = mapper.readValue(json, User.class);
System.out.println("Deserialized User Name: " + user.getName());
}
}
JSON ইনপুট:
{
"user_name": "Alice"
}
আউটপুট:
Deserialized User Name: Alice
3. Combined Usage: @JsonGetter এবং @JsonSetter
Getter এবং Setter মেথডে আলাদা JSON প্রপার্টি নাম ব্যবহার করা যেতে পারে।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;
public class User {
private String name;
@JsonGetter("user_name")
public String getName() {
return name;
}
@JsonSetter("user_name")
public void setName(String name) {
this.name = name;
}
}
Serialization এবং Deserialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class CombinedExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Deserialize
String json = "{\"user_name\":\"Alice\"}";
User user = mapper.readValue(json, User.class);
System.out.println("Deserialized User Name: " + user.getName());
// Serialize
String serializedJson = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + serializedJson);
}
}
JSON ইনপুট:
{
"user_name": "Alice"
}
JSON আউটপুট:
{
"user_name": "Alice"
}
4. Custom Logic in Getter and Setter
Getter এবং Setter মেথডে কাস্টম লজিক যোগ করা যেতে পারে।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonGetter;
import com.fasterxml.jackson.annotation.JsonSetter;
public class User {
private String name;
@JsonGetter("user_name")
public String getFormattedName() {
return "User: " + name;
}
@JsonSetter("user_name")
public void setNameFromJson(String name) {
this.name = name.trim();
}
}
Serialization এবং Deserialization:
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomLogicExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Deserialize
String json = "{\"user_name\":\" Alice \"}";
User user = mapper.readValue(json, User.class);
System.out.println("Deserialized User Name: " + user.getFormattedName());
// Serialize
String serializedJson = mapper.writeValueAsString(user);
System.out.println("Serialized JSON: " + serializedJson);
}
}
JSON ইনপুট:
{
"user_name": " Alice "
}
JSON আউটপুট:
{
"user_name": "User: Alice"
}
5. @JsonProperty Alternative
@JsonGetter এবং @JsonSetter না ব্যবহার করে @JsonProperty দিয়ে Getter এবং Setter মেথডে একই প্রপার্টি নিয়ন্ত্রণ করা যায়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonProperty;
public class User {
private String name;
@JsonProperty("user_name")
public String getName() {
return name;
}
@JsonProperty("user_name")
public void setName(String name) {
this.name = name;
}
}
6. Best Practices
- Consistency in Naming:
@JsonGetterএবং@JsonSetterব্যবহার করলে প্রপার্টি নাম কনসিসটেন্ট রাখুন।
- Use @JsonProperty for Simplicity:
- ছোট এবং সোজা কনফিগারেশনের জন্য
@JsonPropertyব্যবহার করুন।
- ছোট এবং সোজা কনফিগারেশনের জন্য
- Custom Logic in Methods:
- কাস্টম লজিক যোগ করার জন্য Getter এবং Setter মেথডে কাস্টমাইজেশন যোগ করুন।
- Readable JSON Design:
- JSON প্রপার্টি নাম সহজ এবং বোধগম্য রাখুন।
Jackson-এর @JsonGetter এবং @JsonSetter ব্যবহার করে কাস্টম Getter এবং Setter মেথড তৈরি করা যায়। এটি JSON প্রপার্টি এবং Java ফিল্ডের মধ্যে কাস্টম ম্যাপিং করতে অত্যন্ত কার্যকর। Industry Standards অনুযায়ী সঠিক অ্যানোটেশন এবং লজিক ব্যবহার করলে কোড আরও মেনটেইনেবল এবং কার্যকর হবে।
Read more