网关转发订单详情时 createTime 是 1735689600000,升级后的订单服务返回 2025-01-01T00:00:00.000+00:00。前端 parseInt 得到 NaN,列表里时间列全显示 Invalid Date。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,两个服务的 ObjectMapper 配置不一致,一个按毫秒数写,一个按 ISO 字符串写。Date 的序列化格式由 WRITE_DATES_AS_TIMESTAMPS 决定,这个开关不在接口契约里,前端只能按其中一种解析。

「Jackson 时间序列化格式」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。改完顺手把文档补一句,省得下次自己重新推一遍。

ObjectMapper m = new ObjectMapper();
m.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
m.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

具体做法是,先确认是哪个服务改了配置 对比两边 ObjectMapper 的 feature;统一在契约里写明时间用毫秒数还是 ISO 字符串 不要各写各的;兼容期在前端判断类型 数字直接 new Date 字符串走 Date.parse;改完抓一次响应体 确认字段形态和文档一致。

最后用这个标准收尾,两个服务返回的 createTime 形态一致 前端时间列不再出现 Invalid Date。

作者 9823189