【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>  


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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值