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

cod*_*ent 17 spring spring-mvc jackson spring-boot jackson2

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

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: false
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

"someDate": "2017-09-11T07:53:27.000+0000"
Run Code Online (Sandbox Code Playgroud)

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

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

"someDate": "2017-09-11T09:53:27.000+0200"
Run Code Online (Sandbox Code Playgroud)

bar*_*ini 22

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

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
Run Code Online (Sandbox Code Playgroud)

  • @codependent我在我的项目中也使用了jackson,这个配置解决了我的时区问题.无论如何,如果你解决了你的问题,没有什么可争辩的:)如果有人可以使用它,我会留下我的帖子.快乐的编码. (3认同)
  • 杰克逊不会接电话的。默认的时区是正确的。我的解决方案解决了。不管怎么说,还是要谢谢你 (2认同)

Jau*_*era 22

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

spring.jackson.time-zone: America/Sao_Paulo
Run Code Online (Sandbox Code Playgroud)

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

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


cod*_*ent 17

解决了注册Jackson2ObjectMapperBuilderCustomizer bean的问题:

@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
    return jacksonObjectMapperBuilder -> 
        jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*H G 6

对此有两种解决方案:

1.添加JSON格式注释

@JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "Asia/Kolkata")
private Date insertionTime;
Run Code Online (Sandbox Code Playgroud)

2.将Jackson时区添加到属性中(spring boot)

spring.jackson.time-zone: America/Sao_Paulo
Run Code Online (Sandbox Code Playgroud)

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