【Spring】Spring MVC Controller 参数中文乱码

问题描述:

在Controller中接收到的POST参数如果是中文的话,显示为乱码。已知客户端传过来时编码为UTF-8。


问题产生分析:

Spring MVC中默认的编码格式为“ISO-8859-1”,因此造成乱码。


解决方案:

所有的解决方案都是将编码转为UTF-8,至于方式,这里总结了3种,很明显第三种最好用。

①Controller传入参数为的HttpServletRequest类,获取到request,并调用

[java] view plain copy
  1. request.setCharacterEncoding("UTF-8");  

来获取到UTF8格式的request,然后在取出参数就是正确的中文了。

举个栗子:

[java] view plain copy
  1. @RequestMapping("/login")  
  2. public @ResponseBody ResponseEntity<LoginInfo> login(HttpServletRequest request) {  
  3.        LoginInfo li=new LoginInfo();  
  4.        try {  
  5.        request.setCharacterEncoding("UTF-8");  
  6.        String nameString  = request.getParameter("screen_name");  
  7.        System.out.println(nameString);  
  8.        } catch (Exception e) {  
  9.            e.printStackTrace();  
  10.        }finally {  
  11.            return new ResponseEntity<LoginInfo>(li, HttpStatus.OK);  
  12.        }  
  13.    }  

②仍然是使用@RequestParam获取参数,然后调用

[java] view plain copy
  1. str= new String(str.getBytes("ISO-8859-1"),"UTF-8");  
注意处理异常。

以上两种方法都必须在每一个Controller函数中调用,太过麻烦。有没有一种全局配置方式,让参数能自动转为UTF-8呢?其实SpringMVC早就设计好了,在Web.xml中配置字符过滤器如下

[html] view plain copy
  1. <!-- 字符过滤器 -->  
  2.     <filter>  
  3.         <filter-name>encodingFilter</filter-name>  
  4.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  5.         <init-param>  
  6.             <param-name>encoding</param-name>  
  7.             <param-value>UTF-8</param-value>  
  8.         </init-param>  
  9.     </filter>  
  10.     <filter-mapping>  
  11.         <filter-name>encodingFilter</filter-name>  
  12.         <url-pattern>/*</url-pattern>  
  13.     </filter-mapping>  

好啦,至此问题就完美解决了。

需要注意,三种方法使用一个即可,使用两个的话,转两次又成乱码了。

猜你喜欢

转载自blog.csdn.net/qq_37701443/article/details/80612126