调试代码时,用postman测试,发现请求中参数包含花括号{},都没有经过拦截器,直接报400Bad Request ;或者参数是中文的话,后台获取的参数是乱码,得不到想要的结果。
一般两个方面
发送请求的一方:postman的问题
接受请求的一方:tomcat的问题
一.对于大括号问题:
-
postman解决方案:
可以对相应的参数进行编码: 具体操作就是使用鼠标在大括号上右键,选择EncodeURIComponent; 或者手动转码:{ : %7B ; } : %7D
-
tomcat解决方案:
tomcat有三个解决办法:
1.修改config下的server.xml文件;(推荐,好像所有tomcat版本都支持;)
在下图位置(访问端口处)添加:
relaxedQueryChars="[]|{}^\`"<>"
2.换个低版本;
tomcat7.0.6版本以前的好像都可以;
3.修改config下的catalina.properties文件;
- tomcat有些版本不支持(如tomcat9.0.21就不支持),换个相近的支持的tomcat版本;
- 修改tomcat里config下的catalina.properties文件的最后一行;(可能需要经常回来配置,因为设置可能会被重置) 具体设置如下:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
参考:https://blog.youkuaiyun.com/RyanDon/article/details/82664696
二. 对于中文问题:
postman中可以设置转码或者设置全局变量,测试了一下并不好用。
于是检查tomcat的配置,发现tomcat默认配置并没有对文字编码进行配置 URIEncoding=“UTF-8”
于是:
修改tomcat server.xml:在如下位置,加上 URIEncoding=“UTF-8”
<Connector port=“8180” protocol=“HTTP/1.1”
connectionTimeout=“20000”
redirectPort=“8443” URIEncoding=“UTF-8”/>
感谢https://blog.youkuaiyun.com/che_ku/article/details/79445808