1密幔、在web.xml中配置 HiddenHttpMethodFilter 過(guò)濾器楔脯。
2、瀏覽器發(fā)送 POST 請(qǐng)求胯甩。
3昧廷、在發(fā)送 POST 請(qǐng)求時(shí),帶一個(gè) name="_method" value="PUT/DELETE" 的隱藏域偎箫。
REST:表現(xiàn)層狀態(tài)轉(zhuǎn)化木柬,如果客戶端想操作服務(wù)器端,必須通過(guò)某種手段淹办,讓服務(wù)器端發(fā)送狀態(tài)轉(zhuǎn)化眉枕,而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化怜森。
具體來(lái)說(shuō)速挑,就是 HTTP 協(xié)議里面有四個(gè)表示操作方式的動(dòng)詞 GET、POST副硅、PUT姥宝、DELETE,分別對(duì)應(yīng)四種基本操作: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 ? ? ? ? ? ? ? ? ? ?新增一個(gè) order?
HiddenHttpMethodFilter
在瀏覽器端的 Form 表單中只支持 GET碳蛋、POST 請(qǐng)求,不支持 PUT省咨、DELETE 請(qǐng)求肃弟。Spring 3.0增加了一個(gè)過(guò)濾器可以將 POST 請(qǐng)求轉(zhuǎn)化為 PUT、DELETE 請(qǐng)求茸炒。
在 web.xnl 文件中配置 HiddenHttpMethodFilter 過(guò)濾器愕乎。
<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>
因?yàn)樾枰獙?POST 請(qǐng)求轉(zhuǎn)化為 PUT 和 DELETE 請(qǐng)求,所以在測(cè)試界面需要?jiǎng)?chuàng)建一個(gè) form 表單,且提交方法設(shè)為 post 壁公。因?yàn)?HiddenHttpMethodFilter 過(guò)濾器的原理是獲取一個(gè) name 為 _method 的屬性感论,獲取其值,根據(jù)其值決定轉(zhuǎn)化為 PUT 還是 DELETE 請(qǐng)求紊册,所以需要在表單中設(shè)置一個(gè) name 值為 _method 的隱藏域元素比肄。如下:
<form action="/testPUT" method="post">
<input type="hidden" name="_method" value="PUT">
...
<input type="submit" value="testPUT">
</form>
在Controller 類中添加一個(gè)方法快耿,用戶響應(yīng) PUT 隱射,方法設(shè)置為 RequestMethod.PUT芳绩。
@RequestMapping(value="formtestPUT",method=RequestMethod.PUT)
public String formPut(String username){
System.out.println("put");
return "success";
}
將 POST 轉(zhuǎn)化為 DELETE 類似掀亥。