Spring Data JPA 支援 Java 8 日期和時間類型到資料庫列的對應。但是,ZonedDateTime 的預設 JSON 序列化格式可以產生詳細輸出。本文探討如何在 JSON 序列化過程中將 ZonedDateTime 格式化為 ISO 格式。
儘管使用 @DateTimeFormat 註解和 iso = DateTimeFormat.ISO.DATE_TIME,ZonedDateTime 的 JSON 序列化仍然會產生一個詳細的物件。目標是將 ZonedDateTime 格式化為更簡潔的 ISO 格式。
JSON 序列化問題可能是由 Jackson 引起的,Jackson 在 Spring Data JPA 中處理 JSON 序列化。要解決此問題,需要新增 Jackson 的 Java 8 日期和時間 API 模組。
將以下相依性新增至您的 pom.xml:
<dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.6.0</version> </dependency>
新增依賴後,註冊JavaModule Jackson:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule());
ZonedDateTime getter 方法上的 @JsonFormat 註解可用於在序列化過程中自訂日期格式。例如:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ") public ZonedDateTime getTime() { return time; }
這會將 ZonedDateTime 格式化為 ISO 格式:yyyy-MM-dd'T'HH:mm:ss.SSSZ。
以下範例示範了JavaTimeModule的用法和格式自訂:
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; } }
此範例的輸出將是:
{"time":"2015-07-25T23:09:01.795+0700"}
以上是如何在 Spring Data JPA JSON 序列化中將 ZonedDateTime 格式化為 ISO 8601?的詳細內容。更多資訊請關注PHP中文網其他相關文章!