spring.jackson.time-zone=GMT+8 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss # JDBC spring.datasource.url=jdbc:mysql://host:3306/db?serverTimezone=Asia/Shanghai
接口返回的时间字段比数据库里的值早八小时,前端展示的创建时间整体错位。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,序列化时按 UTC 输出,而业务按本地时间理解;另外字段类型是 Date 还是 LocalDateTime 处理方式不同。
「Jackson 时区偏移」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:统一配置时区与格式;数据库驱动时区参数一并对齐;不要混用 Date 与 LocalDateTime。
改完只确认一件事:接口返回时间与数据库查询结果一致,跨天数据归属正确。