前端调详情接口一直 400,后端说没收到 id。前端把请求参数截图发群里,params 里明明写着 id=12,两边吵了半天。
params 在不同地方含义不一样
路由里的 params 指路径参数,比如 /user/:id 匹配到的 12;查询串里的参数是 ?id=12,挂在 URL 后面;axios 的 params 配置会拼到 URL,data 才放进请求体。名字都叫参数,位置完全不同,后端从哪读,结果就不一样。
后端怎么接
Spring 里 @PathVariable 取路径,@RequestParam 取查询串或表单,@RequestBody 取 JSON 体。Express 里 req.params、req.query、req.body 分别对应这三处。用了哪个注解,前端就得按对应位置传,错一个就是空值或 400。
axios.get("/api/user/12", { params: { from: "list" } })最常见的四个错
- GET 带 body:很多网关直接忽略,参数等于没传
- 数组写法:ids=1&ids=2 和 ids[]=1&ids[]=2 后端解析不同
- 中文没编码:URL 里直接塞中文,服务端收到乱码
- Content-Type 不对:发 JSON 却写成表单类型,body 解析为空
两分钟定位
打开浏览器 Network,看 Request URL 里有没有参数,再看 Payload 里是什么格式。复制成 curl 直接打后端,能复现就与前端框架无关。对照接口文档确认参数位置,比在群里争谁对更省时间。
命名也别自作主张
大小写敏感,userId 和 userid 是两个键。驼峰和蛇形在跨语言调用时经常对不上,接口文档写清楚,别靠猜。分页参数 page 从 0 还是 1 开始,也要提前约定。
params 不是统一叫法,先看请求实际发到哪,再改代码。位置对了,参数名才有意义。