SpringMVC中显示提交的表单中的信息出现中文乱码
背景
表单代码如下
<form action="/book/addBook" method="post">
<table>
<tr>
<td>书名</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>作者</td>
<td><input type="text" name="author"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
Controller中接口代码如下
@PostMapping (value = "/addBook")
public void addBook(String name, String author, HttpServletResponse resp) throws IOException {
System.out.println("name = " + name);
System.out.println("author = " + author);
//输出的编码设置
resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write(name + ">>>" + author);
}
问题解决
为了使 resp.getWriter().write( name + ">>>" + author ) 方法成功在浏览器上显示中文, 需要针对编码做两方面设置。
其一,保证表单中提交的汉字字符串name, author 被接口正确地拿到。需要在web.xml中作filter设置。
<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>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
其二,保证接口中的汉字正确地被响应到浏览器,需要对 HttpServletResponse resp 设置。
resp.setContentType("text/html;charset=UTF-8");