最近在玩云服務(wù)器,搭建微信微信小程序服務(wù)端,微信小程序通過https協(xié)議請(qǐng)求數(shù)據(jù),可是在本地eclipse環(huán)境下調(diào)試,都能返回結(jié)果,但是部署到服務(wù)器上(tomcat容器)卻始終返回不了數(shù)據(jù),最開始沒往亂碼方面想,一直以為是數(shù)據(jù)的問題,經(jīng)過排查數(shù)據(jù),數(shù)據(jù)和本地?cái)?shù)據(jù)庫完全一致,偶然的一次插入操作,發(fā)現(xiàn)插入數(shù)據(jù)庫的中文字段亂碼,這才開始排查是不是接收到的參數(shù)亂碼,經(jīng)過打印入?yún)?,果然是亂碼,于是在網(wǎng)上查找解決方案,由于客戶端發(fā)送的是get請(qǐng)求,容器是tomcat,網(wǎng)上說需要在server.xml中加入U(xiǎn)RIEncoding="utf-8",即
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
但是修改過后,還是亂碼,再繼續(xù)排查,原來自己配置了ssl的,需要在ssl的配置中也加入U(xiǎn)RIEncoding="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,再次發(fā)送請(qǐng)求,問題終于解決。總結(jié)如果是tomcat容器又配置了ssl且是get請(qǐng)求的話,如果出現(xiàn)了亂碼,建議往這方面排查。
網(wǎng)上也有說明,如果是post的請(qǐng)求,需要在web.xml中配置一個(gè)字符過濾器,即
<!-- 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>
以上本要曾經(jīng)遇到過的坑,希望對(duì)大家有用。