@JsonAlias অ্যানোটেশন ব্যবহার করে ডিসিরিয়ালাইজেশনের (JSON → Java Object) সময় একটি ফিল্ডের জন্য এক বা একাধিক অ্যাল্টারনেটিভ (বিকল্প) নাম ডিফাইন করা যায়। কিন্তু সিরিয়ালাইজেশনের (Java Object → JSON) সময় শুধু একচুড়া লজিক্যাল প্রপার্টি নামই ব্যবহার হয়, অ্যালিয়াসগুলো ব্যবহার হয় না।
সিনট্যাক্স
@Target(value={ANNOTATION_TYPE, FIELD, METHOD, PARAMETER})
@Retention(value=RUNTIME)
public @interface JsonAlias {
String[] value();
}
উদাহরণ
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
import java.io.*;
public class ObjectToJsonTest {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
Technology tech = new Technology("Java", "Oracle");
Employee emp = new Employee(110, "Raja", tech);
String jsonWriter = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(emp);
System.out.println(jsonWriter);
}
}
// Technology ক্লাস
class Technology {
@JsonProperty("skill")
private String skill;
@JsonProperty("subSkill")
@JsonAlias({"sSkill", "mySubSkill"}) // অ্যালিয়াস ডিফাইন
private String subSkill;
// constructors, getters, setters...
}
// Employee ক্লাস
class Employee {
@JsonProperty("empId")
private Integer id;
@JsonProperty("empName")
@JsonAlias({"ename", "myename"}) // অ্যালিয়াস ডিফাইন
private String name;
@JsonProperty("empTechnology")
private Technology tech;
// constructors, getters, setters...
}
আউটপুট (সিরিয়ালাইজেশন)
{
"empTechnology" : {
"skill" : "Java",
"subSkill" : "Oracle"
},
"empId" : 110,
"empName" : "Raja"
}
ব্যাখ্যা: সিরিয়ালাইজেশনে empName, skill, subSkill নামগুলো ব্যবহার হয়েছে। কিন্তু ডিসিরিয়ালাইজেশনের সময় JSON-এ ename, myename, sSkill, mySubSkill নামগুলো থাকলে সেগুলো সঠিক ফিল্ডে ম্যাপ হয়ে যাবে। এটি API ভার্সনিং বা এক্সটার্নাল সিস্টেমের সাথে ইন্টিগ্রেশনে খুব কাজে লাগে।