接口升到 v2 后把 oldStatus 从 DTO 里删了,装了旧版的客户端还在传这个字段,服务端开了 FAIL_ON_UNKNOWN_PROPERTIES,请求直接 400,旧版本日活还有 1.2 万。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,字段下线没有走兼容期,新旧客户端同时在线时只能有一边能用。反序列化配置又刚好是严格模式,多一个字段就整体失败。版本号放在路径上,但 v1 已经指向同一套代码。
碰到「旧字段兼容期」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
curl -i -X POST http://127.0.0.1:8080/api/v2/orders \ -H 'Content-Type: application/json' \ -d @old_client_payload.json
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,把 FAIL_ON_UNKNOWN_PROPERTIES 关掉 未知字段忽略;oldStatus 保留一个版本 标 @Deprecated 并在文档里写明下线时间;v1 路由继续走旧 DTO 至少留两个发版周期;用旧版客户端抓到的报文回归一次。
最后用这个标准收尾,带 oldStatus 的旧报文返回 200 新字段仍按新规则生效。
