SpringMVC(二)AJAX发送PUT/DELETE请求引发的血案:

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

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

原因:
Tomcat会做:
1.将请求体中的数据,封装成一个map
2.request.getParameter(“id”)就会从这个map中取值
3.SpringMvc封装POJO对象的时候,
会进行request.getParamter()操作从map中获取值,然后把值封装到POJO中去。
AJAX发送PUT请求引发的血案:
PUT请求,请求体中的数据,request.getParamter()拿不到
Tomcat一看是PUT请求,就不会把请求体中的key-value封装到map中,只有POST形式的请求会才封装到map中去。

解决方案:
解决方案
这个问题有两种解决方案,第一种比较复杂,第二种比较简单,正常我们肯定是使用第二种的,当然并不排除使用第一种方式的场景.

方案一
配置web.xml文件

<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>

在发送Ajax请求的时候,使用如下的格式:
可以看到不同的地方,首先配置HiddenHttpMethodFilter,这个类可以把POST转换成对应的_method=?的?号中的内容,从而实现请求.当然每次写Ajax请求的时候,都需要协商method字段,便于解析.

$.ajax({
    url: "${pageContext.request.contextPath}/emp/" + id,
    type: "POST",  ///
    data: $("#app form").serialize() +"&_method=PUT", 
    success: function (result) {
        alert("操作成功!");
    }
});

方案二
方案二就比较简单了.只需要一个简单的web.xml的配置.

配置SpringMVC,把PUT或者DELETE请求转换成POST

    <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请求而不需要做任何的处理.

$.ajax({
    url: "${pageContext.request.contextPath}/emp/" + id,
    type: "PUT",
    data: $("#app form").serialize(),
    success: function (result) {
        alert("操作成功!");
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值