解决Ajax中Restful风格PUT和DELETE请求传递参数无效

问题:在Ajax中,采用Restful风格PUT和DELETE请求传递参数无效,传递到后台的参数值为null

原因

         * Tomcat

*       1.将请求体中的数据,封装成一个map
*       2.request.getParameter("id")就会从这个map中取值
*       3.SpringMvc封装POJO对象的时候,
*            会把POJO中每个属性的值进行request.getParamter();

*  AJAX发送PUT请求引发的
*     PUT请求,请求体中的数据,request.getParamter()拿不到
*     Tomcat一看是PUT就不会封装请求体中的数据为map,只有POST形式的请求才封装请求为map

  

解决方案:   

       1、 能支持直接发送PUT之类请求还要封装请求体中的数据,但是不支持DELETE

      在web.xml中配置上HttpPutFormContentFilter,
       作用:将请求体中的数据解析包装成一个map

       request被重新包装,request.getParameter()被重写,就会从自己封装的map中取数据

       (局限性:仅仅适合表单对象信息的传参,如果是单个信息数据不通过表单,例如,简单传入一个id,来更新特定数据就发现还是无法传参)

<!-- 将put请求的数据转换成一个Map数据后返回成request,并重写getParmater方法
	     简要的说:就是把put的数据封装了,并可以用request.getParameter获取属性 -->
	<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>

      配置完后,当更新对象,ajax传参时,直接在参数设置 type:"PUT" 就行。

2、 支持PUT,DELETE请求

    在web.xml中配置

<!-- 使用Rest风格的URI 将页面普通的post请求转为指定的delete或者put请求-->
	<filter>
	<filter-name>HiddenHttpMethodFilter</filter-name>
	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
	</filter>
	<filter-mapping>
	<filter-name>HiddenHttpMethodFilter</filter-name>
	<url-pattern>/*</url-pattern>
	</filter-mapping>

  原理是:在Aajx中发送post请求后,带_method参数,将其修改为PUT,或者DELETE请求

例子:JS代码中该为

$.ajax({
                   url:"${APP_PATH}/RecordController/record",
                   type:"POST",
                   data:{id :id ,
                       _method:"PUT"},
                   success:function(result){
                       alert("update success");
                   }
                   }); 
 或者在url中加&_method=”PUT”或者&_method=”DELETE”即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值