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

时间:2017-09-11 08:50:49

标签: spring spring-mvc spring-boot jackson jackson2

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

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

这就是我得到的:

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

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

如何让Jackson使用实际时区序列化这些日期时间值? GMT + 2

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

4 个答案:

答案 0 :(得分:20)

您可以将整个应用程序的时区设置为配置类:

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

答案 1 :(得分:19)

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

spring.jackson.time-zone: America/Sao_Paulo
application.properties中的

解决了这个问题。

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

答案 2 :(得分:13)

解决了注册Jackson2ObjectMapperBuilderCustomizer bean的问题:

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

答案 3 :(得分:0)

有2种解决方案:

1。添加JSON格式注释

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

2。将Jackson时区添加到属性(春季启动)

spring.jackson.time-zone: America/Sao_Paulo

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