AJAX直接发送PUT请求引发的问题
问题:前端直接发送ajax=PUT时,请求体有数据,但是后端代码中controller层上的对象封装不上。
原因:Tomcat本身的问题 Tomcat运行过程中:
1)、将请求体中的数据,封装一个map。
2)、request.getParameter(“xxx”)就会从这个map中取值。
3)、SpringMVC封装POJO对象的时候,会把POJO中每个属性的值,request.getParamter(“xxx”)得到;
发送PUT请求时,请求体中的数据,request.getParameter(“xxx”)拿不到,Tomcat一看是PUT不会封装请求体中的数据为map,只有POST形式的请求才封装请求体为map。
解决方案:
我们要能支持直接发送PUT之类的请求还要封装请求体中的数据:
1、 配置上HttpPutFormContentFilter;
<filter>
<filter-name>HttpPutFormContentFilter</filter-name>
<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpPutFormContentFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、 这个过滤器的作用就是将请求体重的数据解析包装成一个map。
3、 Request被重新包装,request.getParameter(“xxx”)被重写,就会从自己封装的map中取数据。