请求地址:Request URL:
http://localhost:8080/Expofarea/allList?name=数据分析
接收方法:
@ResponseBody
@RequestMapping("/Expofarea/allList")
public List<ChangeEntity> getAllByJobTag(String name) {
List<ChangeEntity> all = expofareaService.getAllByJobTag(name);
return all;
}
接收到的name是乱码:name=????。
问题产生分析:
Spring MVC中默认的编码格式为“ISO-8859-1”,因此造成乱码。
简单的解决方式:
New String(request.getParameter("xxx").getBytes("iso-8859-1"),"utf-8")
最好的解决方式:
在web.xml中配置Spring字符过滤器,添加:
<!-- 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>
GET方法接收到中文乱码在tomcat的server.xml添加URIEncoding="utf-8"
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
变更为:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
PS:分析了一遍,发现项目的编码都是utf-8,是没问题,说明问题出在了tomcat本身。
-
打开server.xml,第69行(一般来说都是这里),发现<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />是没有指定编码的。
- 解决:在<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>加上URIEncoding="UTF-8。
- 重启项目,重新请求方法,好了,期待已久的中文出现啦。此刻才发现,中文是多么的亲切。