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

你也可以添加额外的类型,但是需要你自己转化,这个在后面会介绍。


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