springmvc传参中文乱码问题解决

最近在玩云服务器,搭建微信微信小程序服务端,微信小程序通过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>  

以上本要曾经遇到过的坑,希望对大家有用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容