首页 > 解决方案 > Spring mvc过滤器不生效

问题描述

我正在学习 SpringMVC。我使用的版本是 4.2.5.RELEASE。我配置的过滤器web.xml似乎不起作用

服务器:Tomcat 7

问题:当我使用该GET方法传入中文参数时,即使我配置了UTF-8编码转换的过滤器,但我得到的字符串还是乱码

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>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我认为我的配置没有错

Controller

@RequestMapping(value = "/user/info", method = RequestMethod.GET)
public String getInfo(HttpServletRequest request,
                      @RequestParam("username") String username, Model model) {

    UserInfo userInfo = new UserInfo(username, "xxx", "xxx");
    Logger.i(userInfo.toString());
    model.addAttribute("info", userInfo);
    return "user/info";
}

我传入中文参数的时候,控制台打印出来的信息是乱码,回到前面也是乱码。返回是“ request.getCharacterEncoding()UTF-8”

但是当我使用:

try {
    username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

可以正常显示。

于是我把Tomcat的默认编码改成了UTF-8。之后,即使我不在代码中进行转码,也能得到正确的参数。

问题:所以我很困惑过滤器没有效果。

我要对你们的热情表示衷心的感谢。谢谢!

标签: javaspring-mvcfilter

解决方案


您是否尝试过配置 Tomcat 的server.xml?尝试URIEncoding="UTF-8"为组件设置属性Connector

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIencoding="UTF-8"
           redirectPort="8443" />

你可以在这里获得更多信息


推荐阅读