商品限购从 999 改成 99,前端加了提示,接口仍然接受 quantity=500,订单创建成功,运营当天发现 6 笔超限订单。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,上限值同时写在注解和配置里,改配置时注解没动。@Max 的值是编译期常量,读不到配置中心的新值。规则变更没有测试覆盖,改完只看前端提示。
「注解与业务规则」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。报错里带路径的,先去看那个路径在不在、权限对不对。
grep -rn '@Max(999)' --include=*.java src/main/java curl -s -X POST http://127.0.0.1:8080/api/orders -d @qty_100.json
同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。
具体做法是,把上限抽成配置项 用自定义校验器读取配置;或者启动时用 @Value 组装校验逻辑 不再写死常量;补一条边界测试 99 通过 100 拒绝;改完配置后发一笔 100 件的请求验证。
最后用这个标准收尾,quantity=100 返回 400 配置改成 99 后不用重新打包就生效。
