@PathVariable 註解詳解

在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) {
    // 具體的方法代碼…
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章