0%

Java接收Axios-GET请求中的数组参数

Java接收Axios-GET请求中的数组参数


今天前端在发起API接口请求时提示跨域问题,但同域名其他API接口请求正常,很是奇怪。

异常接口请求示例

1
/api/course/getPageList?trainCyclep[]=40&scope=

1. 安装 qs

1
npm install qs

2. 引用 qs 库,并修改GET请求参数中数组参数的格式

1
2
3
4
5
6
7
8
9
const qs = require('qs');

axios.get(url, {
params,
paramsSerializer: (params) => {
// 将数组 a[]=1&a[]=2 形式改为 a=1&a=2
return qs.stringify(params, {arrayFormat: 'repeat'});
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
// 形式:ids=1&ids=2&ids=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: 'repeat'})

// 形式:ids[]=1&ids[]=2&ids[]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: 'brackets'})

// 形式: ids[0]=1&aids[1]=2&ids[2]=3 @RequestParam无法接收
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: 'indices'})


// 使用 List<Long> 和 Long[] 是没有区别的,区别在于 @RequestParam 中的参数是否加[]
// @RequestParam("tagIdList[]") List<Long> or @RequestParam("tagIdList[]") List<Long> 可以接收 brackets
// @RequestParam Long[] or @RequestParam List<Long> 可以接收 repeat

参考