現在都流行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接口了。
大功告成!