SpringMVC 前后端数据交互 中文乱码
ajax 前台传入数据,但是后台接收到的数据中文乱码
首先我们分析一下原因:我们调用接口的时候传入的中文,是没有乱码的
此时我们看一下Java后台接口对应的编码:
-
默认情况:Servlet容器(如Tomcat)默认使用ISO-8859-1解码请求参数
-
中文问题:中文字符在ISO-8859-1编码下会变成乱码
我们的程序是跑在tomcat 上面的,自然使用的是默认的编码:ISO-8859-1,我是使用tomcat插件启动的项目,并没有设置编码,所有采用的是默认的编码
如何来解决编码的问题,那就是:
-
告诉Servlet容器使用UTF-8解码请求体(POST参数)
-
必须在第一次调用
request.getParameter()
之前设置才有效
如果在每个接口方法的前面都加上:
request.setCharacterEncoding("UTF-8");
就可以解决中文乱码的原因,但是这样的代码要在所有的接口中写一遍,确实优点不近人情,那么有没有什么好的解决办法,存在一个过滤器是在dispaterServlet 分发任务之前就可以执行,
所以我们可以在设置设置所有的方法都执行某个filter 这样就是统一设置编码了
原生的过滤器:
public interface Filter {default void init(FilterConfig filterConfig) throws ServletException {}void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;default void destroy() {}
}
其实我们只要实现这个接口,就可以了,我们可以写自己的过滤器,也可以使用spring 自带的过滤器
<filter><filter-name>encodingFilter</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>encodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
处理之后;