Spring Boot 2.0 @JsonFormat注解失效解决
2021-04-20
背景
接手了个新项目,前端交互有时间处理。习惯性的在响应值和入参上加上了如下代码
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
注解说明:
@DateTimeFormat(pattern = "yyyy-MM-dd")
DateTimeFormat是spring自带的处理框架,主要用于将时间格式化,可以将前端页面传来的一个字符串转成一个Date对象。
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
JsonFormat来源于jackson。为在属性值上 @JsonFormat(pattern=”yyyy-MM-dd”,timezone=”GMT+8”),如果直接使用 @JsonFormat(pattern=”yyyy-MM-dd”)就会出现2018-08-01 08:00:00的情况, 会相差8个小时,因为我们是东八区(北京时间)。所以我们在格式化的时候要指定时区(timezone )GMT+8 表示东八区,就是北京时间
过程
前端告诉我,他要的是日期,不是日期加时间。我看了下返回值字段上加的注解**@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")** 没问题啊。于是就开始了调试之路 ,经过自己的测试,真的是带上了时间,
以前是遇到过时间不准的问题 ,那是因为没有指定时区,以格林尼治时间来格式化了,和现在的不一样。
解决
经过一系列的百度,发现可能是fastjson和@JsonFormat(Jackson)不兼容导致的。于是替换@JsonFormat为fastJson的**@JSONField(format = "yyyy-MM-dd")**
在测试,完美解决