URI模板

URI模板可以为快速访问 @RequestMapping 中指定的URL的一个特定的部分提供很大的便利。URI模板是一个类似于URI的字符串,只不过其中包含了一个或多个的变量名。当你使用实际的值去填充这些变量名的时候,模板就退化成了一个URI。在URI模板的RFC提议中定义了一个URI是如何进行参数化的。比如说,一个这个URI模板 http://www.example.com/users/{userId} 就包含了一个变量名userId。将值fred赋给这个变量名后,它就变成了一个URI: http://www.example.com/users/fred 。在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 . 

为了处理 @PathVariables 注解,Spring MVC必须通过变量名来找到URI模板中相对应的变量。你可以在注解中直接声明:

@RequestMapping(path="/owners/{ownerId}}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
// 具体的方法代码…
}

或者,如果URI模板中的变量名与方法的参数名是相同的,则你可以不必再指定一次。只要你在编译的时候留下debug信息,Spring MVC就可以自动匹配URL模板中与方法参数
名相同的变量名。

@RequestMapping(path="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
// 具体的方法代码…
}

一个方法可以拥有任意数量的 @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";
}

URI模板可以从类级别和方法级别的 @RequestMapping 注解获取数据。因此,像这样的 findPet() 方法可以被类似于 /owners/42/pets/21 这样的URL路由并调用到:

_@Controller_
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping("/pets/{petId}")
public void findPet(_@PathVariable_ String ownerId, _@PathVariable_ String petId,
Model model) {
// 方法实现体这里忽略
}
}

@PathVariable 可以被应用于所有 简单类型 的参数上,比如int、long、Date等类型。Spring会自动地帮你把参数转化成合适的类型,如果转换失败,就抛出一
个 TypeMismatchException。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值