@JsonFormat Jackson-এর একটি গুরুত্বপূর্ণ অ্যানোটেশন, যা JSON Serialization এবং Deserialization-এর সময় ডেটার ফরম্যাট কাস্টমাইজ করতে ব্যবহৃত হয়। এটি বিশেষ করে তারিখ, সময় এবং সংখ্যা সংক্রান্ত ডেটার জন্য ব্যবহার করা হয়।
এখানে আমরা বিভিন্ন ধরনের Date, Time, এবং Number ফরম্যাট কাস্টমাইজ করার জন্য @JsonFormat এর ব্যবহার দেখব।
1. Date এবং Time ফরম্যাটিং
@JsonFormat ব্যবহার করে তারিখ এবং সময়ের ফরম্যাট কাস্টমাইজ করা হয়।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Dhaka")
private Date eventDate;
public Event(String name, Date eventDate) {
this.name = name;
this.eventDate = eventDate;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonFormatExample {
public static void main(String[] args) throws Exception {
Event event = new Event("Meeting", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Meeting",
"eventDate": "2024-12-21 15:30:00"
}
Explanation:
pattern = "yyyy-MM-dd HH:mm:ss": তারিখ এবং সময়ের ফরম্যাট নির্ধারণ করেছে।timezone = "Asia/Dhaka": টাইমজোন কনফিগার করা হয়েছে, যাতে সময়ে স্থানীয় সময় ব্যবহার করা হয়।
2. Number Formatting
@JsonFormat ব্যবহার করে সংখ্যা (যেমন: টাকা বা বড় সংখ্যার ফরম্যাটিং) কাস্টমাইজ করা যায়।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
public class Product {
private String name;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#,###.00")
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class ProductExample {
public static void main(String[] args) throws Exception {
Product product = new Product("Laptop", 123456.789);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(product);
System.out.println(json);
}
}
JSON Output:
{
"name": "Laptop",
"price": "123,456.79"
}
Explanation:
pattern = "#,###.00": সংখ্যার ফরম্যাটিং করা হয়েছে, যাতে কমা দিয়ে হাজারের সংখ্যা বিভক্ত হয় এবং দুইটি দশমিক সংখ্যা থাকে।
3. Enum Formatting
@JsonFormat ব্যবহার করে Enum এর Serialization কাস্টমাইজ করা যেতে পারে।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum Status {
SUCCESS(1, "Operation Successful"),
FAILURE(0, "Operation Failed");
private final int code;
private final String message;
Status(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class EnumExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(Status.SUCCESS);
System.out.println(json);
}
}
JSON Output:
{
"code": 1,
"message": "Operation Successful"
}
Explanation:
@JsonFormat(shape = JsonFormat.Shape.OBJECT): Enum কে Object হিসেবে Serialize করার জন্য।
4. List বা Array Formatting
@JsonFormat ব্যবহার করে List বা Array-র আউটপুট কাস্টমাইজ করা যায়।
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.List;
public class Person {
private String name;
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
private List<String> hobbies;
public Person(String name, List<String> hobbies) {
this.name = name;
this.hobbies = hobbies;
}
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Arrays;
public class PersonExample {
public static void main(String[] args) throws Exception {
Person person = new Person("Rahim", Arrays.asList("Reading", "Gaming", "Traveling"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
["Rahim",["Reading","Gaming","Traveling"]]
Explanation:
@JsonFormat(shape = JsonFormat.Shape.ARRAY): এই ফরম্যাট ব্যবহার করেPersonক্লাসের Object কে JSON Array হিসেবে রূপান্তরিত করা হয়েছে।
5. Handling TimeZone in Date Formats
কোড উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date eventDate;
// Getters and Setters
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class EventTimeZoneExample {
public static void main(String[] args) throws Exception {
Event event = new Event("Global Event", new Date());
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(event);
System.out.println(json);
}
}
JSON Output:
{
"name": "Global Event",
"eventDate": "2024-12-21 12:00:00"
}
Explanation:
timezone = "UTC": ইউটিসি টাইমজোনে তারিখ এবং সময় ফরম্যাট করা হয়েছে।
@JsonFormatএকটি শক্তিশালী অ্যানোটেশন যা Jackson-এ বিভিন্ন ডেটা ফরম্যাট কাস্টমাইজ করার জন্য ব্যবহৃত হয়, বিশেষত তারিখ, সময় এবং সংখ্যা ফরম্যাটিং-এর জন্য।- এটি Serialization এবং Deserialization উভয়ের সময় ফরম্যাট কাস্টমাইজেশন করতে সহায়তা করে, যেমন টাইমজোন, প্যাটার্ন, আকার (shape) ইত্যাদি।
- JSON API-তে এক্সটার্নাল ডেটা রূপান্তর এবং অন্যান্য বৈশিষ্ট্যগুলির জন্য
@JsonFormatগুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more