@PathVariable使用

为使映射正确工作,捕获 URI 变量 {id} 的名称必须与 @PathVariable 成员参数 String id 相同。


@GetMapping("/{id}")
public Object id(@PathVariable Long id) {
  return id ;
}

2.3 类级别的路径变量

下面的示例展示了如何使用 @PathVariable 在类和方法级别访问URI 变量。


@RestController
@RequestMapping("/pv/{type}")
public class PathVariableController {

  @GetMapping("/{id}")
  public Object id(@PathVariable Integer type, @PathVariable("id") Long key) {
    return type + "@" +key ;
  }
}

2.4 多个URI变量

你也可以定义多个 @PathVariable 注解来访问捕获的 URI 变量。


@GetMapping("/{cate}/{id}")
public Object category(@PathVariable String cate, @PathVariable Long id) {
  return cate + "@" + id ;
}

@GetMapping("/api/{tag}/query/{name}")
public String getByTagAndName(@PathVariable Map<String, String> paths) {
  String tag = paths.get("tag");
  String name = paths.get("name");
  return tag + "@" + name ;
}

2.6 正则路径变量

关于正则路径变量在之前的一篇文章中已经介绍过,通过如下链接查看:

@GetMapping("/vk/api/{name:[a-z]+}")
public String getJarFile(@PathVariable String name) {
  return name ;
}

 

2.7 可选的路径变量

默认情况下@PathVariable路径变量是必须,否则服务端将MethodArgumentTypeMismatchException异常。我们除了可以通过设置PathVariable注解的required属性为false外,还可以通过Optional类型接收值,如下示例:


@GetMapping({"/users/{id}", "/users/"})
public Object byId(@PathVariable Optional<Long> id) {
  return id.orElseGet(() -> -1L) ;
}

2.9 在非Controller中取得路径变量

通常请求的路径变量是在Controller层被捕获并处理的。如果你希望在Service层或其他非Controller组件中获取这些路径变量,而不是通过参数传递的方式,你则可以通过如下的方式


private HttpServletRequest request ;
public void uriVar() {
  Map<String, String> vars = (Map<String, String>)request
    .getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE) ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值