这是以Post请求方式接受来的中文字符乱码
就像之前JavaWeb阶段的情况一样
所以,按照JavaWeb的方法,我们应该只需要在获取之前设置好编码处理就行了
可以先从这个处理方法开始试试,但是参数在编码之前就已经获取了,所以这样是没有用的
于是测试第二种方法,因为所有的请求都会被过滤器最先拦截下来,再放行给Servlet程序
这里本来想使用注解的,但是好像没有API支持吧,用不了就还是老办法XML配置
package cn.dai.filter; import javax.servlet.*; import java.io.IOException; /** * @author ArkD42 * @file SpringMVC * @create 2020 - 05 - 07 - 14:38 */ public class EncodingFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("UTF-8"); // 一般来说返回数据不会出现什么乱码 // servletResponse.setCharacterEncoding("UTF-8"); // 不要忘记放行请求哦 filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { } }
web.xml的配置
<!-- 还需要在配置一下注册到Web中--> <filter> <filter-name>EF</filter-name> <filter-class>cn.dai.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EF</filter-name> <!-- / 不能过滤,必须是/* --> <url-pattern>/*</url-pattern> </filter-mapping>
访问测试成功,中文获取正常
要注意的是过滤器的路径配置【也成为路由配置】不可以单写反斜杠
否则过滤的只是单个工程首页的过滤,应该写反斜杠 + 通配符星号
这个过滤器我们可以自己写,也可以交给SpringMVC的过滤器来完成
我们只需要配置web.xml即可
【这个过滤器也一样,路由要写成 / *,否则也会失效】
<filter> <filter-name>SpringMVC EF</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> </filter> <filter-mapping> <filter-name>SpringMVC EF</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>