Axios传递ID数组到Spring MVC控制器报400错误,如何解决?
问题解决:Axios传数组到Spring Boot控制器报400 Bad Request
错误原因
你前端发送的请求体是包含genreIds字段的JSON对象(格式类似{"genreIds": [1,2,3,4]}),但后端@RequestBody直接声明接收Long[]类型,Spring无法将对象解析为纯数组,因此返回400错误。
两种解决方案
方案一:修改前端请求,直接发送纯数组
调整Axios的请求体,直接传递数组而非包裹在对象中:
axios.put('{{ myUrl }}', this.form.selectedGenres)
此时后端原有的@RequestBody Long[] genreIds就能正确解析请求体中的数组数据。
方案二:修改后端,用DTO类接收请求对象
如果前端不想修改请求格式,后端可以定义一个数据传输对象(DTO)来匹配前端的请求结构:
public class GenreIdsRequest { private Long[] genreIds; // 必须提供getter和setter,Spring才能完成属性注入 public Long[] getGenreIds() { return genreIds; } public void setGenreIds(Long[] genreIds) { this.genreIds = genreIds; } }
然后更新控制器方法的参数:
@PutMapping("/url") Song myMethod( @PathVariable Long songId, @RequestBody GenreIdsRequest request ) { Long[] genreIds = request.getGenreIds(); System.out.println(genreIds); // 后续业务代码 }
额外验证点
- 确认
this.form.selectedGenres确实是数组类型(比如[1,2,3,4]),而非字符串或其他格式 - 检查Axios请求的
Content-Type是否为application/json(Axios默认会自动设置,若有自定义配置需确保该值正确)
内容的提问来源于stack exchange,提问作者Dusto
相关产品推荐
相关产品推荐

