{"total": 100, "success": 97,
 "failed": [{"index": 36, "reason": "invalid phone"}]}

批量导入 100 条,其中第 37 条手机号格式不对,接口返回 400,整批一条都没写进去。前端只显示导入失败,用户不知道是哪几条出了问题。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,批量接口把整批放在一个事务里,任意一条校验失败就整体回滚,返回体也只有一句错误信息。调用方拿不到逐条结果,只能整批重试或者人工比对,重试还会把已经成功的记录再写一遍。

围绕「批量接口部分成功」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。

处理上按这个顺序:响应体改成逐条结果数组 带上索引 状态和错误原因;校验失败的条目跳过 其余照常写入 事务按条提交;整体状态用 207 或 200 加汇总字段 不要用 400 一刀切;前端按失败索引高亮对应行 支持只重提失败项。

改完只确认一件事:故意放三条坏数据 接口返回成功 97 条 失败列表精确列出三条的索引和原因。

作者 9823189