springmvc在controller中使用HttpServletRequest设置编码无效

关于springmvc的一些问题,在controller中使用HttpServletRequest设置编码为啥无效?

@Controller
public class UserController {

    @RequestMapping("/test")
//这里形参有两个String name,HttpServletRequest request
    public String login(String name,HttpServletRequest request) throws UnsupportedEncodingException {
        System.out.println("name: " + name);   
        request.setCharacterEncoding("UTF-8");  // 设置utf8编码
        String parameter = request.getParameter("name");
        System.out.println("parameter: " + parameter);
        return "OK";
    }

}

结果如下:

img

请问为什么这样无法解决中文乱码问题?

但是如果接收的参数只有一个HttpServletRequest request的话就可以解决中文乱码如图:

img

您好,针对你的问题,可以用以下方式试一下:
对于POST请求,Tomcat默认使用ISO-8859-1进行数据流解析,但如果请求体使用的UTF-8进行的编码,编码与解码的字符集不一致导致中文出现乱码。
对于GET请求在URL中携带的参数,Tomcat从8的版本开始默认使用的UTF-8进行的解析,所以无中文乱码问题。如果tomcat是8下的版本,则使用的ISO-8859-1编码,所以会出现乱码问题。
CSDN有一篇文章讲解的不错,链接:http://t.csdn.cn/KpHQ8
希望可以解决你的问题。

可能和你的工具有关系

开发工具可能有问题,改下配置看看

设置编码需要在获取参数之前。如果你使用springmvc框架的话,参数已经被dispatch处理器获取过了,需要在web.xml中配置编码过滤器。如果你使用原生servlet,就要先设置编码,再使用request.getparm获取参数。