URI Template Patterns

URI 模板可以提供給@RequestMapping註解訪問特定的url一個很方便的方式。URI模板是一個類似於URI的String,包含一個或者多個參數名字。例如,URI模板是以下的情況:http://www.example.com/users/{userId}包含了變量userId, 如果通過這樣的一個URI去訪問http://www.example.com/users/fred,那麼userId的值就是fred。

在Spring MVC中你可以使用@PathVariable註解將URI的參數的值綁定到方法的參數上。


@RequestMapping(value = "/owners/{ownerId}", method = RequestMethod.GET)
	public String findOwner(@PathVariable String ownerId, Model model) {
		Owner owner = ownerService.findOwner(ownerId);
		model.addAttribute("owner", owner);
		return "displayOwner";
	}
這個模板" /owners/{ownerId}" 就是指定了參數的名字是ownerId,當控制器去處理請求的時候,ownerId 的值就會出現在URI中合適的部分。

爲了去處理@PathVariable中的參數名和URI中的參數名,Spring MVC需要去匹配這兩個名字,例如你也可以這樣去指定:

@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
	public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
		// implementation omitted
	}
如果你的方法的參數名和URI模板中的名字是一樣的,那麼你就可以不需要這樣的去配置。

一個方法可以有多個@PathVariable的註解。

@RequestMapping(value = "/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用在Map<String, String>參數上時,那麼map中的值就會被URI 模板中的參數值填補。

@RequestMapping("/pathvariable/{userId}/{userName}/{password}")
	public String testPathvariable(@PathVariable Map<String,String> strMap){
		for(String str : strMap.keySet()){
			System.out.println(str + "  " + strMap.get(str));
		}
		return "pathvariable";
	}

一個URI模板可以被不同的@RequestMapping控制,例如下面,你可以使用:/owners/42/pets/21訪問。

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
	@RequestMapping("/pets/{petId}")
	public void findPet(@PathVariable String ownerId,
			@PathVariable String petId, Model model) {
		// implementation omitted
	}
}
@PathVariable註解的參數可以是簡單的數據類型,例如int,String, Date等,String自動的進行轉換或者如果轉換失敗的話,那麼就會拋出TypeMismatchException

你也可以添加額外的類型,但是需要你自己轉化,這個在後面會介紹。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章