@ConstructorProperties অ্যানোটেশন java.beans প্যাকেজ থেকে, যা JSON কে জাভা অবজেক্টে ডিসিরিয়ালাইজ করার সময় অ্যানোটেটেড কনস্ট্রাক্টর ব্যবহার করতে সাহায্য করে। এই অ্যানোটেশন Jackson 2.7 ভার্সন থেকে সাপোর্ট করে। এটি খুব সিম্পলভাবে কাজ করে — কনস্ট্রাক্টারের প্রতিটি প্যারামিটারে আলাদা অ্যানোটেশন দিতে হবে না, বরং কনস্ট্রাক্টর প্যারামিটারগুলোর নামের একটি অ্যারে দিয়ে দিলে চলে।
সিনট্যাক্স
@Documented @Target(value=CONSTRUCTOR) @Retention(value=RUNTIME) public @interface ConstructorProperties
উদাহরণ
import com.fasterxml.jackson.databind.ObjectMapper;
import java.beans.ConstructorProperties;
public class ConstructorPropertiesAnnotationTest {
public static void main(String args[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Employee emp = new Employee(115, "Raja");
String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
System.out.println(jsonString);
}
}
// Employee ক্লাস
class Employee {
private final int id;
private final String name;
@ConstructorProperties({"id", "name"})
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
public int getEmpId() {
return id;
}
public String getEmpName() {
return name;
}
}
আউটপুট
{
"empName" : "Raja",
"empId" : 115
}
ব্যাখ্যা: কনস্ট্রাক্টর প্যারামিটার নামগুলো @ConstructorProperties({"id", "name"}) দিয়ে বলে দেওয়া হয়েছে। জ্যাকসন এই নামগুলো ব্যবহার করে JSON প্রোপার্টি ম্যাপ করে। গেটার মেথডের নাম (getEmpId, getEmpName) থেকে প্রোপার্টি নাম empId, empName হয়েছে (JavaBeans কনভেনশন)।
কখন ব্যবহার করবেন: ইমিউটেবল অবজেক্ট (final ফিল্ড, কোনো সেটার নেই) ডিসিরিয়ালাইজ করার সময়, বা কনস্ট্রাক্টর প্যারামিটার নাম কম্পাইল টাইমে রিফ্লেকশনে পাওয়া যাওয়া নয় (ডিবাগ ইনফো ছাড়া কম্পাইল হলে)।