Java 8 থেকে LocalDate, LocalDateTime, ZonedDateTime প্রভৃতি Date/Time API ব্যবহার করা শুরু হয়। জ্যাকসন ডিফল্টভাবে এই টাইপগুলোর সাথে সরাসরি কাজ করতে পারে না। তবে, Jackson Module for Java 8 Date/Time ব্যবহার করে এগুলোর জন্য সমর্থন যোগ করা সম্ভব।
Jackson এবং Java 8 Date/Time API ব্যবহারের ধাপসমূহ
১. Dependencies যোগ করা
Jackson-এর মডিউল যোগ করতে Maven বা Gradle ব্যবহার করুন।
Maven:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.15.2</version> <!-- আপডেটেড সংস্করণ নিশ্চিত করুন -->
</dependency>
Gradle:
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.15.2'
২. ObjectMapper কনফিগার করা
Java 8 এর Date/Time API সঠিকভাবে সাপোর্ট করার জন্য ObjectMapper-এ JSR310Module রেজিস্টার করতে হবে।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
public class JacksonJava8DateTimeExample {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
// Java 8 Date/Time API এর জন্য মডিউল যোগ করা
mapper.registerModule(new JavaTimeModule());
// Optional: ISO-8601 স্ট্যান্ডার্ড অনুসারে লেখার জন্য কনফিগারেশন
mapper.findAndRegisterModules();
}
}
Serialization এবং Deserialization উদাহরণ
১. Serialization (Java Object to JSON)
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.time.LocalDate;
import java.time.LocalDateTime;
class Person {
private String name;
@JsonFormat(pattern = "yyyy-MM-dd") // কাস্টম ফরম্যাট
private LocalDate birthDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // কাস্টম ফরম্যাট
private LocalDateTime createdAt;
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LocalDate getBirthDate() {
return birthDate;
}
public void setBirthDate(LocalDate birthDate) {
this.birthDate = birthDate;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
}
public class SerializationExample {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Person person = new Person();
person.setName("Jackson");
person.setBirthDate(LocalDate.of(1990, 5, 20));
person.setCreatedAt(LocalDateTime.now());
String json = mapper.writeValueAsString(person);
System.out.println("Serialized JSON: " + json);
}
}
Output:
{
"name": "Jackson",
"birthDate": "1990-05-20",
"createdAt": "2024-12-21 14:30:45"
}
২. Deserialization (JSON to Java Object)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class DeserializationExample {
public static void main(String[] args) throws Exception {
String json = "{ \"name\": \"Jackson\", \"birthDate\": \"1990-05-20\", \"createdAt\": \"2024-12-21 14:30:45\" }";
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Person person = mapper.readValue(json, Person.class);
System.out.println("Deserialized Object: " + person.getName() + ", " + person.getBirthDate() + ", " + person.getCreatedAt());
}
}
Output:
Deserialized Object: Jackson, 1990-05-20, 2024-12-21T14:30:45
Custom Date/Time Format
@JsonFormatঅ্যানোটেশন ব্যবহার করে JSON ইনপুট এবং আউটপুটে তারিখের নির্দিষ্ট ফরম্যাট সংজ্ঞায়িত করা যায়।- ডিফল্ট ফরম্যাট:
ISO-8601(e.g.,"2024-12-21T14:30:45")
উদাহরণ:
@JsonFormat(pattern = "dd-MM-yyyy")
private LocalDate birthDate;
ObjectMapper-এর Global Configuration
যদি সব ক্ষেত্রেই নির্দিষ্ট ফরম্যাট প্রয়োগ করতে চান, তাহলে ObjectMapper-এ SerializationFeature কনফিগার করতে পারেন।
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.databind.SerializationFeature;
public class GlobalConfiguration {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
// ডেটা লেখার সময় টাইমস্ট্যাম্প এড়ানো
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
}
}
উপকারিতা
- JSR 310 সমর্থন:
LocalDate,LocalDateTime, এবং অন্যান্য Java 8 টাইম API সরাসরি সাপোর্ট। - কাস্টম ফরম্যাট: নির্দিষ্ট ফরম্যাটে তারিখ/সময় পরিচালনা করা।
- ISO-8601 স্ট্যান্ডার্ড: আন্তর্জাতিক স্ট্যান্ডার্ড ফরম্যাট ব্যবহারের সুবিধা।
- Serialization ও Deserialization সহজতর: বড় JSON ডেটা বা কাস্টম ডেটা টাইম প্রসেসিং দ্রুত ও কার্যকর।
Jackson-এর Java 8 Date/Time API সমর্থন JSON ডেটার সাথে কাজ করার সময় আরও কার্যকর এবং সহজ সমাধান প্রদান করে।
Read more