SpringMVC中的Rest风格URL

版权声明:如需转载、粘贴内容,必须在转载和粘贴文中标明文章内容出至 https://blog.csdn.net/ynzcxx/article/details/77648175

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



猜你喜欢

转载自blog.csdn.net/ynzcxx/article/details/77648175