2021年12月9日复盘 前端日期少8小时
今天又遇到项目中的日期差了8个小时
从A项目看没问题,数据源是从B项目获取的。
查看了B项目,mysql的url加了GMT+8这个配置
serverTimezone=GMT%2B8
断点调用,肉眼看也没啥问题
返回给前端的,肉眼看有问题。。。。
那么问题推测应该是在Bean To Json上面了
我们把断点断到获取这个属性的get方法上,最终调用到了com.fasterxml.jackson.databind.ser.BeanPropertyWriter
再看获取到的日期序列化器
发现最终调用的是一个自定义的SimpleDateFormat.
于是乎,跑去看看我的实体类。
哦吼,有个格式化的注解
然后在调试界面上试了下
原值是有时区的,结果序列化之后,自动扣掉这个时区,8小时了。
按照这个思路
1、从数据库读出来的数据是正确的
2、解析到前端的时候扣掉了8小时
我们先尝试在日期格式序列化器中增加时区
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
发现正常。
但是这样的话,岂不是所有的都得自己指定?
最终找到直接配置Jackson(默认的视图数据转化)
spring:
jackson:
time-zone: GMT+8
回过头看一下自己的A项目,发现已经配置过这个参数了,难怪没人反馈有问题
突然惊醒一下,我的C项目,我从头打到尾,好像没搞过这玩意,吓死自己
结果一搜,我没用Date。。。哈哈。都用的LocalDateTime