看了很多帖子,大体是因为新版本tomcat不支持特殊字符的原因。
这里出现问题的原因大体实在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"));。问题解决.