java - 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。之后,即使我不在代码中进行转码,也能得到正确的参数。
问题:所以我很困惑过滤器没有效果。
我要对你们的热情表示衷心的感谢。谢谢!
解决方案
您是否尝试过配置 Tomcat 的server.xml
?尝试URIEncoding="UTF-8"
为组件设置属性Connector
:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIencoding="UTF-8"
redirectPort="8443" />
你可以在这里获得更多信息
推荐阅读
- php - 将复杂的多维数组插入SQL,不起作用
- android-studio - 类型不匹配:推断的类型是 FragmentManager 但 FragmentActivity 是预期的
- c++ - 如何将数据库的内容显示到 QListWidget
- rust - 如何在一组通用可变选项上实现复制和克隆特征
- java - BST 旋转使一棵树与另一棵树相等
- asp.net - 母版页不在会话中时出现序列化错误
- mysql - 即使另一个孩子将其作为父母,ON DELETE CASCADE 也会删除父母吗?
- javascript - jQuery:如何以简洁的方式编写 if hasClass 语句
- spring - 当我不调用 thymeleaf 时,thymeleaf 出错
- javascript - 如何打印特定的div?