如何让RESTful支持DEL和PUT
RESTful风格里面,@ModelAttribute是一个语义复杂的对象,其中一个就是在所有的被@Controller修饰的方法之前执行;
@RequestParam:是指url中“?”之后的queryString的内容;
public ResourcePool get(@RequestParam(required=false) String userName)
相应XXX/form?userName=YYYY
另外,对于@ModelAttrbute而言,只是支持RequestParam,不支持PathVariable,因为没有RequestMapping做定义,根本无法知道模式。
与之相对应的@PathVariable,则是指RESTful命名模式中模式通配的部分
1 RequestMapping("/user/{username}") 2 public ResourcePool get(@PathVariable("username") String userName)
另外,RESTful这个美好的事物,PUT/DELETE语义竟然不被浏览器支持。但是spring说我有办法,在web中添加如下的内容
1 <filter> 2 <filter-name>httpMethodFilter</filter-name> 3 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>httpMethodFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping>
完美解决了浏览器不支持PUT/DELETE的问题。这是因为浏览器虽然不支持,但是jsp将会把method=post自动生成为<input type="hidden", value="_method">,不过我是用的spring的标签form,自动生成的可能是spring自己处理的,否则需要自己来添加。