如何在 Spring Boot Jackson Date 序列化中应用默认时区

How to make default time zone apply in Spring Boot Jackson Date serialization

我已将 Spring 启动应用程序配置为将日期序列化为 ISO8601 字符串:

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: false

这就是我得到的:

"someDate": "2017-09-11T07:53:27.000+0000"

然而我的时区是Europe/Madrid。事实上,如果我打印 TimeZone.getDefault() 这就是我得到的。

如何让 Jackson 使用实际时区序列化这些日期时间值?格林威治标准时间+2

"someDate": "2017-09-11T09:53:27.000+0200"

解决了注册 Jackson2ObjectMapperBuilderCustomizer bean 的问题:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
    return jacksonObjectMapperBuilder -> 
        jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}

您可以通过将此添加到配置来为整个应用程序设置时区 class:

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

我发现自己遇到了同样的问题。 就我而言,我的应用程序只有一个时区,然后添加:

spring.jackson.time-zone: America/Sao_Paulo

在我的 application.properties 中解决了问题。

来源:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#JACKSON

有两种解决方案:

1.添加JSON格式注释

@JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "Asia/Kolkata")
private Date insertionTime;

2。将杰克逊时区添加到属性 (spring boot)

spring.jackson.time-zone: America/Sao_Paulo

参考: https://www.baeldung.com/spring-boot-formatting-json-dates