SpringMVC中显示提交的表单中的信息出现中文乱码

249 阅读1分钟

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");