问题描述:
在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>
好啦,至此问题就完美解决了。
需要注意,三种方法使用一个即可,使用两个的话,转两次又成乱码了。