前端采用vue+axios 后端采用spring boot restful javascript
问题: 前端get 请求须要传递array 字段值 后端因为tomcat 版本问题,不支持url接受特殊字符包括 [] {} 等。前端
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986vue
百度搜索到的方案 大都是让 采用字符串形式传参 或者 urlencoding 或者 post 传参、get方式 body传参 等方式java
采用以上方式是能够解决问题,可是设计到先后端均须要处理,不利于先后分离开发 或者 post 查询不符合 restful api 的 规范。jquery
问题url以下:ios
我的建议解决方案spring
1. 安装 qsnpm
https://www.npmjs.com/package/qsaxios
You may use the arrayFormat
option to specify the format of the output array:后端
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 'a[0]=b&a[1]=c'
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 'a[]=b&a[]=c'
qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 'a=b&a=c'
2.get 参数序列化
https://www.kancloud.cn/yunye/axios/234845
例:
// `params` 是即将与请求一块儿发送的 URL 参数
// 必须是一个无格式对象(plain object)或 URLSearchParams 对象
params: {
ID: 12345
},
// `paramsSerializer` 是一个负责 `params` 序列化的函数
// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
paramsSerializer: function(params) {
return Qs.stringify(params, {arrayFormat: 'repeat'})
},
效果:
?ckTbSelected=elementId1&ckTbSelected=elementId2&ckTbSelected=elementId4&page=1&size=10
3. 后台对象的属性采用,List<String> 接收便可。