在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) {
// 具體的方法代碼…
}