在 SpringMVC 中,返回页面打印表单传递的参数时可能会出现中文乱码的情况,一是没有在返回时进行声明,再一个就是接收到提交的参数本身就是乱码
复现一下当时的问题,一个 form 表单提交时发起 post 请求,action 为指定的 servlet-url,结果返回中文字符串时显示乱码
刚开始以为是响应式乱码,然后将 PostMapping 更改为如下
@PostMapping(value = "/addbook", produces = "text/html; charset=utf-8")
问题并没有解决,考虑会不会是传递来的参数就已经是乱码了,打印一看果不其然
问题定位到了就好解决了,SpringMVC 提供了设置字符编码的过滤器,直接糊上标准代码,问题解决
<!-- 标配解决乱码过滤器 -->
<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>