@JsonProperty হল Jackson এর একটি গুরুত্বপূর্ণ অ্যানোটেশন, যা JSON serialization এবং deserialization এর সময় Java ফিল্ড বা মেথডের নাম কাস্টমাইজ করতে ব্যবহৃত হয়। এটি JSON ডেটার সাথে Java ফিল্ডের ম্যাপিং নিয়ন্ত্রণ করে।
মূল ধারণা
- Custom Property Name:
- JSON ফিল্ডের নাম এবং Java ফিল্ডের নাম ভিন্ন হলে তাদের মধ্যে ম্যাপিং করার জন্য
@JsonPropertyব্যবহার করা হয়।
- JSON ফিল্ডের নাম এবং Java ফিল্ডের নাম ভিন্ন হলে তাদের মধ্যে ম্যাপিং করার জন্য
- Serialization এবং Deserialization Control:
- JSON থেকে Java Object (deserialization) এবং Java Object থেকে JSON (serialization) করার সময় নির্দিষ্ট নামের নিয়ন্ত্রণ।
- Optional Properties:
- এটি
valueএর মাধ্যমে একটি JSON ফিল্ডকে নির্দিষ্ট Java ফিল্ডে ম্যাপ করে।
- এটি
- Constructor Parameters:
- কন্সট্রাক্টরের প্যারামিটারের সাথে JSON ফিল্ড ম্যাপিং করার জন্যও এটি ব্যবহৃত হয়।
ব্যবহার পদ্ধতি
1. JSON Field এবং Java Field এর ভিন্ন নাম
যদি JSON ফিল্ড এবং Java ফিল্ডের নাম ভিন্ন হয়, তাহলে @JsonProperty ব্যবহার করতে হবে।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
@JsonProperty("full_name") // Map JSON field "full_name" to Java field "name"
private String name;
@JsonProperty("years") // Map JSON field "years" to Java field "age"
private int age;
// Constructor, Getters, Setters
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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 (Object to JSON)
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonPropertyExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Create object
Person person = new Person("John Doe", 30);
// Serialize to JSON
String json = mapper.writeValueAsString(person);
System.out.println(json); // Output: {"full_name":"John Doe","years":30}
}
}
Deserialization Example (JSON to Object)
String json = "{\"full_name\":\"Jane Doe\",\"years\":25}";
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName() + " - " + person.getAge()); // Output: Jane Doe - 25
2. Constructor Parameter Mapping
@JsonProperty ব্যবহার করে JSON ডেটা থেকে কন্সট্রাক্টরের প্যারামিটারে ডেটা ম্যাপ করা যায়।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
private String name;
private int age;
@JsonCreator
public Person(@JsonProperty("full_name") String name, @JsonProperty("years") int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Deserialization Example
String json = "{\"full_name\":\"Jane Doe\",\"years\":25}";
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName() + " - " + person.getAge()); // Output: Jane Doe - 25
3. Control Visibility (Read-Only or Write-Only Fields)
@JsonProperty এর মাধ্যমে JSON serialization বা deserialization কে সীমাবদ্ধ করা যায়।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
private String name;
@JsonProperty(access = JsonProperty.Access.READ_ONLY) // Serialize only, no deserialization
private int age;
// Constructor, Getters, Setters
}
Explanation
- READ_ONLY: JSON থেকে Object তৈরি করা যাবে না, কিন্তু Object থেকে JSON তৈরি করা যাবে।
- WRITE_ONLY: JSON থেকে Object তৈরি করা যাবে, কিন্তু Object থেকে JSON তৈরি করা যাবে না।
4. Default Values for Missing JSON Fields
@JsonProperty এবং @JsonSetter ব্যবহার করে JSON ডেটাতে একটি ফিল্ড মিসিং থাকলে ডিফল্ট মান সেট করা যায়।
কোড উদাহরণ
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
private String name;
@JsonProperty(defaultValue = "25") // Default value for age
private int age;
// Constructor, Getters, Setters
}
উপকারিতা
- Custom JSON Mapping:
- JSON এবং Java ফিল্ডের মধ্যে নামকরণের পার্থক্য সমাধান করা।
- Flexible Serialization/Deserialization:
- Read-only এবং Write-only ফিল্ড ব্যবস্থাপনা সহজ।
- Constructor Integration:
- কন্সট্রাক্টরের প্যারামিটার ম্যাপিং সহজতর করে।
- Default Values:
- JSON ডেটা মিসিং হলে ডিফল্ট মান প্রদান।
সতর্কতা
@JsonPropertyভুলভাবে ব্যবহার করলে JSON serialization এবং deserialization ব্যর্থ হতে পারে।- Constructor parameter mapping এর সময় সঠিক JSON key ব্যবহার করতে হবে।
@JsonProperty Jackson এর অন্যতম গুরুত্বপূর্ণ অ্যানোটেশন, যা JSON serialization এবং deserialization এর সময় Java ফিল্ড বা মেথডের নাম কাস্টমাইজ করতে ব্যবহৃত হয়। এটি REST API, Microservices, এবং JSON ডেটা প্রক্রিয়াকরণের ক্ষেত্রে অত্যন্ত কার্যকর।
Read more