将 Spring REST 端点配置为在序列化响应对象中的日期字段时忽略附加时区

Posted

技术标签:

【中文标题】将 Spring REST 端点配置为在序列化响应对象中的日期字段时忽略附加时区【英文标题】:Configure Spring REST endpoint to ignore appending timezone when serializing date fields in response objects 【发布时间】:2019-12-30 09:23:08 【问题描述】:

我的 Spring Boot 应用程序中有一个端点,它返回日期范围。 后端是 PostgreSQL,我的数据库中的日期列被定义为 without timezone

我希望我的 Spring Boot 应用程序中的端点按原样返回日期。

目前,日期使用 Spring Boot 服务器的时区进行序列化。

有没有办法配置我的 Spring Boot 应用程序以在序列化时选择性地忽略将时区数据附加到日期?

实体类如下

public class Period
   private Date startdate;
   private Date enddate;

【问题讨论】:

您可以发布使用日期列的实体吗? 嗨@Sebastian,我已将实体包含在问题中 【参考方案1】:

我刚刚发现了一个类似的帖子,里面有一个优雅的解决方案here

只需在application.properties 文件中添加所需的时区即可解决问题

spring.jackson.time-zone= America/Sao_Paulo

【讨论】:

【参考方案2】:

您可以使用更现代的java.time 包,而不是过时的java.util.Date

在您的情况下,您可以使用LocalDate(或LocalDateTime)。它不包含任何有关时区或偏移的信息,默认情况下它被序列化为 ISO 8601 格式,如2019-12-31T23:59:59

【讨论】:

以上是关于将 Spring REST 端点配置为在序列化响应对象中的日期字段时忽略附加时区的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring(Boot)中装饰 REST 响应?

Spring:在 REST 调用响应中插入 cookie

列出所有已部署的 REST 端点(spring-boot、jersey)

试图加快spring-web端点json序列化(加力)

列出所有已部署的 REST 端点(spring-boot、tomcat)

通过 REST 端点进行 Spring Security 身份验证/授权