赞
踩
问题描述:项目前端使用get请求进行数据查询,当传入的参数中含有'['、']'字符时,接口返回错误编码400;传入参数中不含则能正常查询数据。
原因: 项目进行了升级,使用的tomcat换成了更高版本的。
高版本的tomcat,有个新特:严格按照RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符
因为get请求会将参数拼接在url之后,故参数中包含'['、']'字符就会返回400。
解决办法:
1.将get请求替换为post请求(替换成本过高);
2.使用低版本的tomcat
3.使用高版本的tomcat,修改tomcat配置;
4.对请求参数进行编码,可以使用encodeURI()函数;
我这里使用的第4种,因为项目中使用的是统一的get请求方法,故我只需要修改get方法即可
- get(url, params) {
- let _params
- if (Object.is(params, undefined)) {
- _params = ''
- } else {
- _params = '?'
- for (const key in params) {
- if (params.hasOwnProperty(key) && params[key] !== null) {
- _params += `${key}=${params[key]}&`
- }
- }
- }
- _params = encodeURI(_params)
- return service.get(`${url}${_params}`)
- },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。