前端使用axios传递数组后端使用List接收

作者:@caseyfu
本文为作者原创,转载请注明出处:https://www.cnblogs.com/caseor/p/axios-deliver-list-parameter.html


目录

问题
解决
测试

时间: 2020年08月18日

问题

在做项目时遇到一个问题, 前端用axios传递id数组给后端, 请求方法是delete, 后端采用@RequestBody来接受List然后捕捉到异常 Required request body is missing: 意味着后端未能成功接收到参数, 这其中踩了许多坑

  1. @DeleteMapping可以使用@RequestBody接收参数

  2. 如果不是传递字符串, 不要使用JOSN.stringify()把对象转换成字符串格式再传参

  3. qs.stringify()是针对Get方法传参, 将对象转换成一个url, 有大小限制

解决

采用Delete请求方法, Post也是一样的

Get需要使用qs.stringify()进行参数的转换, 这里不涉及

直接上正确的传参方法

// api
/**
* 禁用User
* @param userIds
* @returns {Promise} Promise
* @constructor
*/
export function deleteDisableUserInBulk(userIds) {
return request({
url: '/user/disable-in-bulk',
method: 'delete',
data: userIds
})
}
// 方法调用api
// 不能传入{userIds:array}这个对象, 直接传入array即可
// 不能使用JSON.stringify(array), 如果使用会导致后端无法解析
test() {
const array = [36, 37, 39]
deleteDisableUserInBulk(array).then(response => {
// 返回受影响行数
console.log('受影响行数', response.data.rows)
})
}
// 后端controller
@ApiOperation(value = "根据用户id删除用户", notes = "逻辑删除, 置enabled为false")
@DeleteMapping("/disable-in-bulk")
public Dict disableInBulk(@RequestBody @ApiParam(value = "用户id集合", required = true) List<Long> userIds) {
int rows = this.userService.disableInBulk(userIds);
Dict data = Dict.create().set("rows", rows);
return Result.success(data);
}

测试


图1 后端正确拿到参数

图2 前端返回正确结果

测试证明这是正确的传参方式

posted @   FuKai  阅读(12227)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
目录