Java 8 Date/Time API (LocalDate, LocalDateTime) এর সমর্থন

Date এবং Time হ্যান্ডল করা - জ্যাকসন (Jackson) - Java Technologies

342

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);
    }
}

উপকারিতা

  1. JSR 310 সমর্থন: LocalDate, LocalDateTime, এবং অন্যান্য Java 8 টাইম API সরাসরি সাপোর্ট।
  2. কাস্টম ফরম্যাট: নির্দিষ্ট ফরম্যাটে তারিখ/সময় পরিচালনা করা।
  3. ISO-8601 স্ট্যান্ডার্ড: আন্তর্জাতিক স্ট্যান্ডার্ড ফরম্যাট ব্যবহারের সুবিধা।
  4. Serialization ও Deserialization সহজতর: বড় JSON ডেটা বা কাস্টম ডেটা টাইম প্রসেসিং দ্রুত ও কার্যকর।

Jackson-এর Java 8 Date/Time API সমর্থন JSON ডেটার সাথে কাজ করার সময় আরও কার্যকর এবং সহজ সমাধান প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...