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自己處理的,否則需要自己來添加。