get请求本地调试正确,测试环境报400的问题

看了很多帖子,大体是因为新版本tomcat不支持特殊字符的原因。

http://localhost:8888/arrangeController/toSearch?findPage=pro&attribute={attribute16%22:%22%E6%9C%AC%E7%A7%91\n\n%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22,%22attribute17%22:%22%E9%99%88%E9%9B%AA%E6%B5%8B%E8%AF%95%22,%22attribute18%22:%22342221199310217281%22}

这里出现问题的原因大体实在attribut16中的中文和 \n这种字符。具体乱码跟我从浏览器截取的不一样。这里不是关键,在此忽略,

解决方案一:换tomcat版本,我们测试环境的tomcat版本是 Apache Tomcat/7.0.82,,请求是会报400.。。线上tomcat版本是Apache Tomcat/7.0.57 请求时是没有问题的,。,

解决方式二:

1.首先在tomcat的conf文件夹中的catalina.properties最后 加入一行tomcat.util.http.parser.HttpParser.requestTargetAllow=|,{,}     

这里是为了让参数兼容{ }  即;attribute=={,}

2.然后再请求的参数中加入两次编码:encodeURI(encodeURI(JSON.stringify(resultAttribute)))

完整url为:

window.location.href = '${ctx}/arrangeController/toSearch?findPage=' + findPage + "&attribute=" +encodeURI(encodeURI(JSON.stringify(resultAttribute)));

至于为什么编码两次,我也不清楚。因为我编码一次问题没有解决,

3.在controller解码两次 attribute = java.net.URLDecoder.decode(java.net.URLDecoder.decode(attribute, "UTF-8"));。问题解决.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值