@RequestParam和@PathVariable都能够完成类似的功能。因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。
通过@PathVariable,例如/blogs/1
通过@RequestParam,例如blogs?blogId=1
那么究竟应该选择哪一种呢?建议:
当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam
例如我们会这样设计URL:
/blogs/{blogId}
/blogs?state=publish 而不是/blogs/state/publish来表示处于发布状态的博客文章
@RequestParam的用法:
@RequestMapping("/user")
@ResponseBody
public String getUserBlog(@RequestParam("id") int blogId) {
return "blogId = " + blogId;
}
一旦我们在方法中定义了@RequestParam变量,如果访问的URL中不带有相应的参数,就会抛出异常。这是显然的,Spring尝试帮我们进行绑定,然而没有成功。但有的时候,参数确实不一定永远都存在,这是我们可以通过定义required属性:
@RequestParam(name="id",required=false)
当然,在参数不存在的情况下,可能希望变量有一个默认值:
@RequestParam(name="id",required=false,defaultValue="0")
@PathVariable的用法:
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("testPathVariable:"+id);
return SUCCESS;
}