我正在学习SpringMVC。我使用的版本是4.2.5.RELEASE。我在GET
中配置的过滤器似乎不起作用
服务器:Tomcat 7
问题:当我使用web.xml
方法传入中文参数时,即使我为UTF-8编码转换配置了过滤器,但我得到的字符串仍然是乱码< / p>
<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()
当我传入中文参数时,控制台打印的信息是乱码,返回前面是乱码。
而try {
username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
返回的是“UTF-8”
但是当我使用时:
<!-- Custom styles for this template -->
<link href="css/heroic-features.css" rel="stylesheet">
<!-- Bootstrap core JavaScript -->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
它可以正常显示。
所以我更改了Tomcat的默认编码并将其更改为UTF-8。之后,即使我没有在代码中执行转码,我也可以获得正确的参数。
问题:所以我很困惑,过滤器没有效果。
我想对你的热情表示衷心的感谢。谢谢!
答案 0 :(得分:0)
您是否尝试过配置Tomcat&#39; server.xml
?尝试将URIEncoding="UTF-8"
属性设置为Connector
组件:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIencoding="UTF-8"
redirectPort="8443" />
您可以获得更多信息here