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")**

在测试,完美解决