当Spring MVC Controller接收页面传递的中文参数时,可能会出现乱码的问题。为了解决此问题,可以采取以下步骤:
- 配置过滤器解决POST请求中文乱码问题
在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>
- 配置全局消息转换器解决GET请求中文乱码问题
在Spring MVC配置文件中添加如下配置:
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8"/>
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
- 针对表单提交的解决方案
在控制器类中添加“produces”属性:
@RequestMapping(value = "/user", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBody
public String addUser(@RequestParam("name") String name) {
return "添加用户:" + name;
}
一个针对表单提交中文乱码问题的示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户添加</title>
</head>
<body>
<form action="/user" method="post">
<label>
用户名:
<input type="text" name="name">
</label>
<br>
<input type="submit" value="添加">
</form>
</body>
</html>
在控制器类中添加以下代码:
@RequestMapping(value = "/user", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBody
public String addUser(@RequestParam("name") String name) {
return "添加用户:" + name;
}
一个通过URL传递参数的解决方案:
@RequestMapping(value = "/user/{name}", produces = "text/html;charset=UTF-8")
@ResponseBody
public String showUserName(@PathVariable("name") String name) {
return "用户名:" + name;
}
可以通过以下URL访问:
http://localhost:8080/user/%E7%8E%8B%E4%BA%94
其中,“%E7%8E%8B%E4%BA%94”为“王五”的URL编码。控制器类中的produces属性指明返回值的编码为UTF-8,因此会正确地显示“王五”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题 - Python技术站