SpringMVC中的Rest風格URL
阿新 • • 發佈:2018-11-05
以前請求的URL寫法為
新增:/addorder
修改:/editorder?id=1
獲取:/getorder?id=1
刪除:/deleteorder?id=1
假設現在想將請求改變為:
新增:/order 使用POST請求
修改:/order/1 使用PUT請求
獲取:/order/1 使用GET請求
刪除:/order/1 使用DELETE請求
1、配置HiddenHttpMethodFilter
在Web.xml檔案中新增以下程式碼:
<!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <!-- 配置HiddenHttpMethodFilter過濾請求,這裡設定的是過濾所有請求 --> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2、在請求頁面中新增以下程式碼,分別表示獲取、新增、刪除、修改。
Delete和Put方法需要在表單中新增一個hidden,name為"_method",值為請求方法名DELETE、PUT。
<a href="springmvc/testRest/1">Test Rest Get</a> <br><br> <form action="springmvc/testRest" method="post"> <input type="submit" value="Test Rest Post" /> </form> <br><br> <form action="springmvc/testRest/1" method="post"> <input type="hidden" name="_method" value="DELETE" /> <input type="submit" value="Test Rest Delete" /> </form> <br><br> <form action="springmvc/testRest/1" method="post"> <input type="hidden" name="_method" value="PUT" /> <input type="submit" value="Test Rest Put" /> </form> <br><br>
@RequestMapping(value="/testRest/{id}" , method=RequestMethod.GET)
public String restGet(@PathVariable("id") int id){
System.out.println("Test Rest Get:" + id);
return SUCCESS;
}
@RequestMapping(value="/testRest" , method=RequestMethod.POST)
public String restPost(){
System.out.println("Test Rest Post");
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}" , method=RequestMethod.DELETE)
public String restDelete(@PathVariable("id") int id){
System.out.println("Test Rest Delete:" + id);
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}" , method=RequestMethod.PUT)
public String restPut(@PathVariable("id") int id){
System.out.println("Test Rest Put:" + id);
return SUCCESS;
}
4、啟動頁面,點選按鈕,分別點選後會顯示
Test Rest Get:1
Test Rest Post
Test Rest Delete:1
Test Rest Put:1
注意:Tomcat7.0以後的版本,僅支援GET、POST、HEAD三種請求。
高於7.0版本的,會提示HTTP Status 【405】-【Method Not Allowed】錯誤:
Type Status Report
Message JSPs only permit GET POST or HEAD
Description The method received in the request-line is known by the origin server but not supported by the target resource.
雖然跳轉會出錯,但是我們還是可以看到,後臺還是能執行Delete和Put請求的方法。
估計是Tomcat8.0以後新的設定,解決方法暫未找到。