curl -s -X POST http://127.0.0.1:8080/api/feedback -d @type_consult.json curl -s -X POST http://127.0.0.1:8080/api/feedback -d @type_other_no_remark.json
反馈表单的备注只在 type=OTHER 时必填,上线后选咨询和投诉也被要求填备注,提交失败率 90%,客服一天收到 200 多条无法提交的截图。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,条件必填写成了字段级 @NotBlank,没有跟随另一个字段的取值。DTO 里两个字段互相独立,注解表达不了依赖关系。前端做了联动隐藏,后端仍然按必填校验。
这次卡住的地方就在「条件必填规则」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
处理上按这个顺序:改成类级自定义校验 读取 type 后再决定 remark 是否必填;把依赖关系写进校验器 同时补一条 OTHER 缺备注的反例;前端隐藏字段时同步清空值 避免传空串;三种 type 各提交一次确认只有 OTHER 被拦。
改完只确认一件事:咨询类型不填备注返回 200 OTHER 不填返回 400 提示备注必填。
