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.
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.
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.
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>
Selepas menambah kebergantungan, daftar JavaTimeModule dengan Jackson:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule());
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 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"}
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!