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接口了。

 

大功告成!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM