场景
springboot(2.0.4)使用内置 tomcat(8.5.32), 在GET请求中含有特殊字符 [ ] 时报错:
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
原因
tomcat 版本在8.0.x左右的时候,tomcat.util.http.parser.HttpParser这个类下有对请求地址中的特殊符号进行处理,这里面预留的是{}| 三个符号,并且是需要先配置在系统变量下面的 "tomcat.util.http.parser.HttpParser.requestTargetAllow" 参数有事先定义放行符号,默认情况下系统变量没有该参数,所以连 |{} 三个符号也无法放行。
解决方案
一、去除URL中的特殊字符。
最简单粗暴。
二、使用 POST 方法提交数据
如果场景没有限制 可以改成POST的话就选这个。
三、更换低版本的Tomcat
更换7.x.x版本的tomcat,springboot内置的tomcat版本是固定的,同时需要更换springboot版本。这个