1. 程式人生 > >SpringMVC中的Rest風格URL

SpringMVC中的Rest風格URL

以前請求的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>


3、在類中新增四個方法,分別表示獲取、新增、刪除、修改

	@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以後新的設定,解決方法暫未找到。