以前请求的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以后新的设置,解决方法暂未找到。