为了统一风格,把 DTO 里的 createTime 改成 create_time,没加任何注解。新写入的数据正常,读 Redis 里的老 JSON 时这几个字段全是 null,页面时间显示 1970。日志里能对上时间点,这种反而好排。
Jackson 默认按属性名精确匹配,createTime 和 create_time 是两个不同的键。老键不会被自动映射过去,未知字段被忽略,字段就停在默认值 null 上。这一点先确认清楚,后面就不用反复试。
@JsonAlias({"createTime", "create_time"})
private LocalDateTime createTime;
围绕「字段命名风格兼容」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:在字段上加 @JsonProperty("createTime") 兼容老键 或者用 @JsonAlias 加别名;写入端统一成一种风格 不要两边都写;老缓存要么批量刷一遍 要么在读取时做一次转换;确认没有开 FAIL_ON_UNKNOWN_PROPERTIES 否则老数据会直接抛异常。
结果对不对很好判断,读老缓存时 createTime 有值 页面时间不再是 1970-01-01。
