在Spring MVC中你可以在方法参数上使用@PathVariable注解,将其与URI模板中的参数绑定起来, 如下代码:
@RequestMapping(path="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
URI模板/owners/{ownerId}
指定了一个变量,名为ownerId
。当控制器处理这个请求的时候,ownerId
的值就会被URI模板中对应部分的值所填充。比如说,如果请求的URI是/owners/fred
,此时变量ownerId
的值就是fred
。
一个方法可以拥有任意数量的@PathVariable注解:
@RequestMapping(path="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
Owner owner = ownerService.findOwner(ownerId);
Pet pet = owner.getPet(petId);
model.addAttribute("pet", pet);
return "displayPet";
}
要使 @PathVariable 对应的参数能取到URL中变量,有两种方法:
1、如果URI模板中的变量名与方法的参数名是相同的,则你可以不必再指定一次。只要你在编译的时候留下debug信息,Spring MVC就可以自动匹配URL模板中与方法参数名相同的变量名。如上面所示, 参数名和URL模板中变量名都为ownerId
,这样就可以取到。
2、Spring MVC可以通过变量名来找到URI模板中相对应的变量。你可以在注解中直接声明,如下代码:
@RequestMapping(path="/owners/{ownerId}}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
// 具体的方法代码…
}