@PathVariable用于从RESTful URL路径中提取变量值,支持单个/多个变量、类型转换、JSR-303校验及可选参数(required=false),但不支持默认值。
请求url : xxx/aa/zhangsan/123/10
@GetMapping(value = {"aa/{account}/{password}/{page}","aa/{password}/{page}"})
public String login(@PathVariable(value = "account", required = false) String username,
@PathVariable String password,
@PathVariable Integer page){
1、@PathVariable 用于从 URL 路径中提取变量值。URL 中用花括号 {} 定义占位符,方法参数用 @PathVariable 注解声明,Spring 会自动将对应路径段映射为参数值。
2、required属性默认值为true,即前端必须传递变量值,不传报错。若改为false,则可以允许前端不传该参数值。但是@PathVariable不支持给参数定义默认值。
3、Spring 会自动将路径段字符串转为目标类型(如 Long、Integer、String)。若转换失败(如传入非数字),默认返回 400 Bad Request。
4、示例代码中设置account参数允许不传,这样url就变成了 xxx/aa/123/10 ,如果真的这样调接口,GetMapping上还需要配置一个可解析的路径:aa/{password}/{page}。否则前端会报错,因为
xxx/aa/123/10和xxx/aa/zhangsan/123/10是两个不同的路径。只写aa/{account}/{password}/{page},接口是处理不了aa/{password}/{page}的。