REST
示例:
- /user/1 HTTP GET :得到id=1的user
- /user/1 HTTP DELETE :删除id=1的user
- /user/1 HTTP PUT : 更新id=1的user
- /user HTTP POST :新增user
HiddenHttpMethodFilter:浏览器的form表单只能支持GET和POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的HTTP方法,使得支持GET、POST、DELETE、PUT请求。
所以需要在web.xml中配置HiddenHttpMethodFilter
<!--
配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POST 请求
<filter-name>和<filter-class>位置不能颠倒,只能是<filter-name>在前面
-->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
在控制处理器中:
private static final String SUCCESS = "success";
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id) {
System.out.println("testRest Put: " + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id) {
System.out.println("testRest Delete: " + id);
return SUCCESS;
}
@RequestMapping(value = "/testRest", method = RequestMethod.POST)
public String testRest() {
System.out.println("testRest POST");
return SUCCESS;
}
@RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET)
public String testRest(@PathVariable Integer id) {
System.out.println("testRest GET: " + id);
return SUCCESS;
}
对于发送PUT和DELETE方法,有以下解决方案:
- 配置HiddenHttpMethodFilter
- 需要发送 POST 请求
- 需要在发送 POST 请求时携带一个 name="_method" 的隐藏域, 值为 DELETE 或 PUT
index.jsp如下
<form action="testRest/1" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="TestRest PUT"/>
</form>
<br><br>
<form action="testRest/1" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TestRest DELETE"/>
</form>
<br><br>
<form action="testRest" method="post">
<input type="submit" value="TestRest POST"/>
</form>
<br><br>
<a href="testRest/1">Test Rest Get</a>
<br><br>