Rumah >Java >javaTutorial >Bagaimana untuk Memformat ZonedDateTime ke ISO 8601 dalam Pensiri JPA Data Spring?

Bagaimana untuk Memformat ZonedDateTime ke ISO 8601 dalam Pensiri JPA Data Spring?

DDD
DDDasal
2024-12-13 18:16:18775semak imbas

How to Format ZonedDateTime to ISO 8601 in Spring Data JPA JSON Serialization?

Spring Data JPA: Memformat ZonedDateTime dalam JSON Serialization

Spring Data JPA menyokong pemetaan jenis tarikh dan masa Java 8 kepada lajur pangkalan data. Walau bagaimanapun, format bersiri JSON lalai untuk ZonedDateTime boleh menghasilkan output verbose. Artikel ini meneroka cara memformat ZonedDateTime kepada format ISO semasa penyirian JSON.

Pernyataan Masalah

Walaupun menggunakan anotasi @DateTimeFormat dengan iso = DateTimeFormat.ISO.DATE_TIME, siri JSON bagi ZonedDateTime masih menghasilkan objek terperinci. Matlamatnya ialah untuk memformatkan ZonedDateTime kepada format ISO yang lebih ringkas.

Penyelesaian

Masalah pesiri JSON berkemungkinan disebabkan oleh Jackson, yang mengendalikan penyirian JSON dalam Spring Data JPA. Untuk menyelesaikan masalah ini, modul Jackson untuk API tarikh dan masa Java 8 perlu ditambah.

Tambahan Ketergantungan

Tambahkan kebergantungan berikut pada pom.xml anda:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.6.0</version>
</dependency>

Pendaftaran Modul

Selepas menambah kebergantungan, daftar JavaTimeModule dengan Jackson:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());

Penyesuaian Pemformat

Anotasi @JsonFormat pada kaedah pengambil ZonedDateTime boleh digunakan untuk menyesuaikan format tarikh semasa bersiri. Contohnya:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
public ZonedDateTime getTime() {
    return time;
}

Ini akan memformatkan ZonedDateTime kepada format ISO: yyyy-MM-dd'T'HH:mm:ss.SSSZ.

Contoh

Contoh berikut menunjukkan penggunaan JavaTimeModule dan penyesuaian format:

public static void main(String[] args) throws JsonProcessingException {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    System.out.println(objectMapper.writeValueAsString(new Entity()));
}

static class Entity {
    ZonedDateTime time = ZonedDateTime.now();

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
    public ZonedDateTime getTime() {
        return time;
    }
}

Output contoh ini ialah:

{"time":"2015-07-25T23:09:01.795+0700"}

Kesimpulan

Dengan menambahkan JavaTimeModule Jackson dan menggunakan anotasi @JsonFormat, anda boleh mengawal format siri JSON ZonedDateTime dan menghalang pemindahan data yang tidak diperlukan, mengoptimumkan prestasi dan mengurangkan saiz muatan JSON.

Atas ialah kandungan terperinci Bagaimana untuk Memformat ZonedDateTime ke ISO 8601 dalam Pensiri JPA Data Spring?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn