1、在web.xml中配置 HiddenHttpMethodFilter 過濾器。
2、瀏覽器發(fā)送 POST 請求。
3、在發(fā)送 POST 請求時,帶一個 name="_method" value="PUT/DELETE" 的隱藏域。
REST:表現(xiàn)層狀態(tài)轉(zhuǎn)化,如果客戶端想操作服務器端,必須通過某種手段,讓服務器端發(fā)送狀態(tài)轉(zhuǎn)化,而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。
具體來說,就是 HTTP 協(xié)議里面有四個表示操作方式的動詞 GET、POST、PUT、DELETE,分別對應四種基本操作:GET 用于獲取資源,POST 用于新增資源,PUT 用于更新資源,DELETE 用于刪除資源。
/order/1 ? HTTP GET ? ? ? ? ? ? ?獲得 ID=1 的order
/order/1? HTTP PUT ? ? ? ? ? ? ? 更改 ID=1 的order
/order/1? HTTP DELETE ? ? ? ? ? ? ? ? 刪除 ID=1 的order
/order? ? ? HTTP POST ? ? ? ? ? ? ? ? ? ?新增一個 order?
HiddenHttpMethodFilter
在瀏覽器端的 Form 表單中只支持 GET、POST 請求,不支持 PUT、DELETE 請求。Spring 3.0增加了一個過濾器可以將 POST 請求轉(zhuǎn)化為 PUT、DELETE 請求。
在 web.xnl 文件中配置 HiddenHttpMethodFilter 過濾器。
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>
org.springframework.web.filter.HiddenHttpMethodFilterorg.springframework.web.filter.HiddenHttpMethodFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern
</filter-mapping>
因為需要將 POST 請求轉(zhuǎn)化為 PUT 和 DELETE 請求,所以在測試界面需要創(chuàng)建一個 form 表單,且提交方法設為 post 。因為 HiddenHttpMethodFilter 過濾器的原理是獲取一個 name 為 _method 的屬性,獲取其值,根據(jù)其值決定轉(zhuǎn)化為 PUT 還是 DELETE 請求,所以需要在表單中設置一個 name 值為 _method 的隱藏域元素。如下:
<form action="/testPUT" method="post">
<input type="hidden" name="_method" value="PUT">
...
<input type="submit" value="testPUT">
</form>
在Controller 類中添加一個方法,用戶響應 PUT 隱射,方法設置為 RequestMethod.PUT。
@RequestMapping(value="formtestPUT",method=RequestMethod.PUT)
public String formPut(String username){
System.out.println("put");
return "success";
}
將 POST 轉(zhuǎn)化為 DELETE 類似。