28

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

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

这就是我得到的:

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

但是我的时区是欧洲/马德里。事实上,如果我打印TimeZone.getDefault()这就是我得到的。

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

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

4 回答 4

33

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

spring.jackson.time-zone: America/Sao_Paulo

在我application.properties解决了这个问题。

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

于 2017-12-21T18:42:59.190 回答
31

解决了注册 Jackson2ObjectMapperBuilderCustomizer bean 的问题:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
    return jacksonObjectMapperBuilder -> 
        jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
于 2017-09-11T09:05:32.273 回答
30

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

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
于 2017-09-11T12:08:19.897 回答
5

有两种解决方案:

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

于 2019-12-05T20:00:34.240 回答