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

问题描述:

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


问题产生分析:

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


解决方案:

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

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

request.setCharacterEncoding("UTF-8");

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

举个栗子:

 @RequestMapping("/login")
 public @ResponseBody ResponseEntity<LoginInfo> login(HttpServletRequest request) {
        LoginInfo li=new LoginInfo();
        try {
        request.setCharacterEncoding("UTF-8");
        String nameString  = request.getParameter("screen_name");
        System.out.println(nameString);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            return new ResponseEntity<LoginInfo>(li, HttpStatus.OK);
        }
    }

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

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

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

<!-- 字符过滤器 -->
	<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>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

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

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




  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值