Axios get请求数组参数移除默认的[]

列表查询条件中的状态需要支持多选,字段就有原来的number变成了number[]。在Element Plus的加持下,给el-select添加一个multiple就解决了,打完收工。额,还是测试一下吧:)。选择的状态变了,数据没变呀,遂找后端,经过调查,说是不能参数中不能有[],否则不能正确解析这个参数。

在这里插入图片描述
我隐约记得若干年前,前端用jquery跟后端php对接时就遇到过类似的问题(也可能是我记错了)。现在用的是Axios,我觉得Axios应该会把这个作为选项暴露出来,让使用者可以切换。遂去官网找配置
在这里插入图片描述
大概就是改一下paramsSerializer了,那么怎么改呢?又搜了一下,说是可以改成

paramsSerializer: function(params) {
	return qs.stringify(params, { arrayFormat: 'repeat' });
}

遂安装qs。真能解决问题,就这样吧。

过了几天,也就是今天,我突然想把这个记录下来,于是就想把Axios中的逻辑搞清楚,就去翻代码,无意间看到这段代码(toFormData.js),感觉可以把indexes传成null,就试了试,果然成了
在这里插入图片描述
如下

paramsSerializer: {
	indexes: null,
}

从源码中知道paramsSerializer是支持函数和对象两种参数的。但是文档中却没有,如果我没找错文档的话,那只能说文档跟代码有脱节,滞后了。

如果对你有帮助,请帮忙点赞,嘻嘻:)

### 使用 AxiosGET 请求处理数组作为参数 当通过 Axios 发送 GET 请求并传递数组类型的参数时,可以利用 `params` 配置项来设置 URL 参数Axios 支持多种方式序列化数组到查询字符串中。 以下是具体实现: #### 方法一:默认序列化行为 Axios 默认会将数组转换为重复键的形式附加到 URL 中。例如: ```javascript const params = { ids: [1, 2, 3] }; axios.get('https://example.com/api', { params }) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` 上述代码生成的请求 URL 将类似于以下形式[^1]: ``` https://example.com/api?ids=1&ids=2&ids=3 ``` --- #### 方法二:自定义序列化逻辑 如果希望以其他格式(如 JSON 字符串或其他结构)发送数组,则可以通过配置 `paramsSerializer` 来指定自定义序列化函数。例如: ```javascript const qs = require('qs'); const params = { ids: [10, 20, 30] }; axios.get('https://example.com/api', { params, paramsSerializer: params => qs.stringify(params, { arrayFormat: 'brackets' }) // 使用 brackets 格式 }) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` 此代码生成的请求 URL 可能如下所示[^2]: ``` https://example.com/api?ids[]=10&ids[]=20&ids[]=30 ``` 注意:这里使用了第三方库 `qs` 提供更灵活的序列化选项。如果没有安装该库,可通过命令 `npm install qs` 安装它。 --- #### Spring Boot 后端接收示例 在服务端(假设使用 Spring Boot),可以通过 `@RequestParam` 注解接收数组参数。例如: ```java @RestController @RequestMapping("/api") public class ExampleController { @GetMapping("") public ResponseEntity<?> getExample(@RequestParam List<Integer> ids) { return ResponseEntity.ok(ids); } } ``` 对于客户端传入的 `ids[]` 或多次出现的 `ids` 键,Spring Boot 能够自动将其解析为 Java 列表类型。 --- ### 总结 - 默认情况下,Axios 会将数组中的每一项映射为独立的 URL 查询参数。 - 如果需要特定格式(如方括号的数组表示法),可借助 `paramsSerializer` 和工具库(如 `qs`)完成定制。 - 在后端,Spring Boot 自动支持从 URL 参数中提取列表数据,并绑定至方法参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值