最容易出现乱码的场景是浏览器向服务器发送请求的过程,解决的策略就是强制为请求和响应设置编码格式。
一、POST 方式请求乱码
1. 在每个 Controller 中单独处理
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
2. 在 web.xml 中添加编码过滤器
<filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
二、GET 方式请求乱码
由于 GET 请求的参数是通过 URL 来传递的,所以 POST 设置的编码格式是不起作用的。
比较简单的的方法,就是在应用容器中配置 URL 编码格式。
修改 tomcat 的配置文件 server.xml
<Connector URIEncoding="UTF-8" port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" connectionTimeout="20000" disableUploadTimeout="true" />
在 Connector 标签中添加
URIEncoding="UTF-8"
。