Jackson-এর @JsonCreator এবং @JsonValue অ্যানোটেশনগুলো JSON সিরিয়ালাইজ এবং ডি-সিরিয়ালাইজেশনে আরও বেশি নিয়ন্ত্রণ প্রদান করে। এগুলো সাধারণত কাস্টম অবজেক্ট তৈরির সময় বা JSON ফর্ম্যাট কাস্টমাইজ করার জন্য ব্যবহার করা হয়।
1. @JsonCreator
@JsonCreator ব্যবহার করা হয় ডি-সিরিয়ালাইজেশনের সময় একটি কাস্টম কন্সট্রাক্টর বা স্ট্যাটিক মেথড ব্যবহার করে JSON ডেটা থেকে একটি অবজেক্ট তৈরি করতে। এটি তখন ব্যবহৃত হয় যখন আপনার ক্লাসের ডিফল্ট কন্সট্রাক্টর না থাকে অথবা কাস্টম লজিক প্রয়োজন হয়।
ব্যবহার উদাহরণ:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonCreatorExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// JSON String
String json = "{\"id\":101,\"name\":\"John Doe\"}";
// Deserialize JSON to Java object
Employee employee = mapper.readValue(json, Employee.class);
System.out.println("Deserialized Employee: " + employee);
}
}
class Employee {
private int id;
private String name;
// Constructor with @JsonCreator
@JsonCreator
public Employee(@JsonProperty("id") int id, @JsonProperty("name") String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Employee{id=" + id + ", name='" + name + "'}";
}
}
Output:
Deserialized Employee: Employee{id=101, name='John Doe'}
2. @JsonValue
@JsonValue ব্যবহার করা হয় সিরিয়ালাইজেশনের সময় একটি অবজেক্টকে JSON-এ রূপান্তর করার জন্য। এটি ফিল্ড, মেথড, বা প্রোপার্টিকে নির্দেশ করে যে সেটি JSON এর প্রতিনিধিত্ব করবে।
ব্যবহার উদাহরণ:
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonValueExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Create an Employee object
Employee employee = new Employee(101, "John Doe");
// Serialize Employee object to JSON
String json = mapper.writeValueAsString(employee);
System.out.println("Serialized JSON: " + json);
}
}
class Employee {
private int id;
private String name;
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
@JsonValue
public String toJson() {
return "Employee{id=" + id + ", name='" + name + "'}";
}
}
Output:
Serialized JSON: "Employee{id=101, name='John Doe'}"
উন্নত উদাহরণ: @JsonCreator এবং @JsonValue একসাথে
Enum হ্যান্ডল করার জন্য:
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EnumExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Serialize Enum to JSON
String json = mapper.writeValueAsString(Status.ACTIVE);
System.out.println("Serialized Enum: " + json);
// Deserialize JSON to Enum
Status status = mapper.readValue("\"active\"", Status.class);
System.out.println("Deserialized Enum: " + status);
}
}
enum Status {
ACTIVE("active"),
INACTIVE("inactive");
private final String value;
Status(String value) {
this.value = value;
}
@JsonValue
public String getValue() {
return value;
}
@JsonCreator
public static Status fromValue(String value) {
for (Status status : Status.values()) {
if (status.value.equals(value)) {
return status;
}
}
throw new IllegalArgumentException("Unknown value: " + value);
}
}
Output:
Serialized Enum: "active"
Deserialized Enum: ACTIVE
@JsonCreator এবং @JsonValue এর সুবিধা
- @JsonCreator:
- JSON ডি-সিরিয়ালাইজেশনের সময় কাস্টম কন্সট্রাক্টর বা স্ট্যাটিক ফ্যাক্টরি মেথড ব্যবহার করতে সাহায্য করে।
- ইনপুট JSON-এর কাঠামো কাস্টমাইজ করার ক্ষমতা দেয়।
- @JsonValue:
- সিরিয়ালাইজেশনের সময় একটি নির্দিষ্ট ফিল্ড বা মেথডকে JSON এর জন্য একমাত্র প্রতিনিধিত্ব হিসেবে ব্যবহার করতে সাহায্য করে।
- Enum অথবা কাস্টম অবজেক্ট সিরিয়ালাইজ করার সময় কার্যকর।
- @JsonCreator: ডি-সিরিয়ালাইজ করার সময় নির্দিষ্ট কন্সট্রাক্টর বা মেথড ব্যবহার করতে।
- @JsonValue: সিরিয়ালাইজ করার সময় নির্দিষ্ট মেথড বা ফিল্ডকে JSON-এ রূপান্তর করতে।
এই দুটি অ্যানোটেশন জটিল JSON মডেল বা কাস্টম JSON ফরম্যাটের জন্য কার্যকর এবং নমনীয় সমাধান প্রদান করে।
Read more