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

 

 

posted @ 2021-12-09 15:09  gabin  阅读(119)  评论(0编辑  收藏  举报