如何解决呢???
其实我们可以用过滤器创建字符编码的过滤器spring都写好了直接用就可以l
看下面讲解
首先我们创建一个页面
<form action="param/addbook" method="post">
书名:<input type="text" name="bookName"/><br/>
作者:<input type="text" name="author"/><br/>
价格:<input type="text" name="price"/><br/>
库存:<input type="text" name="stock"/><br/>
销量:<input type="text" name="sales"/><br/>
<hr/>
省:<input type="text" name="address.province"/>
市:<input type="text" name="address.city"/>
街道:<input type="text" name="address.street"/><br/>
<input type="submit"/>
</form>
获取参数的Controller
@RequestMapping("addbook")
public String addBook(Book book){
System.out.println(book);
return "hh";
}
然后创建一个过滤器(必须在其他过滤器之前声明不然过滤器不能提起过滤)
<!--
字符编码过滤器
一定要在设置前端控制器之后就设置 因为如果你设置在其他过滤器后面执行顺序的问题还是会乱码
-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 修改传入的参数为UTF-8-->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 请求和响应默认都是false的设置为true就可以满足源码条件传入参数-->
<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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样运行就没问题了 完美运行
下面我们看一下源码如何实现的
在spring4以下的其实不用设置forceResponseEncoding为true它本身是true的
spring5改都需要设置
下面看一下
是不是好简单哈哈哈