我已将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"
答案 0 :(得分:20)
您可以将整个应用程序的时区设置为配置类:
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}
答案 1 :(得分:19)
我发现自己遇到了同样的问题。 就我而言,我的应用只有一个时区,然后添加:
spring.jackson.time-zone: America/Sao_Paulo
我application.properties
中的解决了这个问题。
答案 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