Spring3.0以后添加了HiddenHttpMethodFilter过滤器,来支持支持Rest 风格的URL请求。
REST url:
— /order/1 HTTP GET :得到 id = 1 的order
— /order/1 HTTP DELETE :删除 id = 1 的order
— /order/1 HTTP PUT :更新 id = 1 的order
— /order/1 HTTP POST :新增 id = 1 的order
首先配置到web.xml文件中
HiddenHttperMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter /*
在POST的 请求中设置参数 _method="DELETE"
编写Java方法
@RequestMapping(value="/testRest/{id}",method=RequestMethod.DELETE)public String testRest(@PathVariable Integer id){ System.out.println("test delete:"+id); return "success";}@RequestMapping(value="/testRest/{id}",method=RequestMethod.PUT)public String testRest(@PathVariable Integer id){ System.out.println("test delete:"+id); return "success";}
原来,在HiddenHttpMethodFilter中的doFilterInternal ,会先去POST请求中获取_method这个参数,根据参数的名字来转发请求。
注意:如果你使用ajax进行传输数据,那么你也应该按照上面的方式做。在你传输数据data里面包含:_method:"PUT"的键值对,并且传输方式依旧设置为"POST".
不然,你用ajax用"PUT"的方式请求,SpringMVC将无法找到你所要传输的数据,throw Handler execution resulted in exception: Request method 'POST' not supported 这样的异常信息。
看源代码可以知道,在SpingMVC中本质上只识别GET,POST!