Spring Mvc Rest为不支持DELETE/PUT的浏览器添加DELETE/PUT支持

现在都流行RESTFul,但是有一个问题,有些浏览器现在就不支持delete/put方式的请求,这些请求发出去之后都会变成get请求,导致rest接口无法被访问到。为了解决这个问题,spring提出了一个解决办法,即在发送请求的时候加上一个额外的_method字段,当spring接收到这个字段时就会通过一些机制,将这个请求发送到特定的接口去。

具体解决方案如下:

1,先添加一个filter。这个filter就是实现这个功能的关键。打开web.xml,添加如下代码(要放到最前面):

 <filter>
        <filter-name>httpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>httpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

这个就会去拦截带有_method的方法进行处理

 

2,前端请求修改

标准的rest delete请求ajax书写方式:

            $.ajax({
                type: "delete",
                url:url,
                data: {"contentId": id},
                success: function (data) {
                    if (data.status == 0) {
                        alert("成功!");
                        location.reload();
                    } else {
                        alert("操作失败!" + data.reason);
                    }
                }
            });

这是理想中的请求方式。然而delete方法并不被浏览器支持,所以要改成下面这样:

 

            $.ajax({
                type: "post",
                url:url,
                data: {"contentId": id, "_method": "delete"},
                success: function (data) {
                    if (data.status == 0) {
                        alert("成功!");
                        location.reload();
                    } else {
                        alert("操作失败!" + data.reason);
                    }
                }
            });

注意标红部分。type为post,因为如果为get的话,data中的参数都会被忽略。参数中加上_method,告诉spring这个是delete请求。如果是表单,则加一个隐藏的input,name是_method即可。这样就可以跨越浏览器来使用rest接口了。

 

大功告成!

转载于:https://www.cnblogs.com/csonezp/p/5752701.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值