首页 >Java >java教程 >如何在 Spring Data JPA JSON 序列化中将 ZonedDateTime 格式化为 ISO 8601?

如何在 Spring Data JPA JSON 序列化中将 ZonedDateTime 格式化为 ISO 8601?

DDD
DDD原创
2024-12-13 18:16:18770浏览

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

Spring Data JPA:在 JSON 序列化中格式化 ZonedDateTime

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn