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>
添加依赖后,注册JavaTimeModule 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"}
通过添加 Jackson 的 JavaTimeModule 并使用 @JsonFormat 注解,您可以控制ZonedDateTime 的 JSON 序列化格式,防止传输不必要的数据,优化性能并减少 JSON 负载的大小。
以上是如何在 Spring Data JPA JSON 序列化中将 ZonedDateTime 格式化为 ISO 8601?的详细内容。更多信息请关注PHP中文网其他相关文章!