最近在玩云服务器,搭建微信微信小程序服务端,微信小程序通过https协议请求数据,可是在本地eclipse环境下调试,都能返回结果,但是部署到服务器上(tomcat容器)却始终返回不了数据,最开始没往乱码方面想,一直以为是数据的问题,经过排查数据,数据和本地数据库完全一致,偶然的一次插入操作,发现插入数据库的中文字段乱码,这才开始排查是不是接收到的参数乱码,经过打印入参,果然是乱码,于是在网上查找解决方案,由于客户端发送的是get请求,容器是tomcat,网上说需要在server.xml中加入URIEncoding="utf-8",即
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
但是修改过后,还是乱码,再继续排查,原来自己配置了ssl的,需要在ssl的配置中也加入URIEncoding="utf-8",即
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="conf/***.***.***.jks"
keystorePass="********************"
clientAuth="false" sslProtocol="TLS" URIEncoding="utf-8"/>
重启tomcat,再次发送请求,问题终于解决。总结如果是tomcat容器又配置了ssl且是get请求的话,如果出现了乱码,建议往这方面排查。
网上也有说明,如果是post的请求,需要在web.xml中配置一个字符过滤器,即
<!-- Spring字符集过滤器 -->
<filter>
<filter-name>SpringEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上本要曾经遇到过的坑,希望对大家有用。