springMVC的注解@PathVariable是什么?详情及用法解析

在路由中定义变量规则后,通常我们需要在处理方法(也就是@RequestMapping注解的方法)中获取这个URL变量的具体值,并根据这个值(例如用户名)做相应的操作,Spring MVC提供的@PathVariable可以帮助我们:

@GetMapping("/users/{username}")
public String userProfile(@PathVariable String username) {
    return String.format("user %s", username);
}

在上述例子中,当@Controller处理HTTP请求时,userProfile的参数username会被自动设置为URL中的对应变量username(同名赋值)的值,例如当HTTP请求为:/users/tianmaying,URL变量username的值tianmaying会被赋给函数参数username,函数的返回值自然也就是:String.format("user %s", username);,即user tianmaying

在默认情况下,Spring会对@PathVariable注解的变量进行自动赋值,当然你也可以指定@PathVariable使用哪一个URL中的变量:

@GetMapping("/users/{username}")
public String userProfile(@PathVariable("username") String user) {
    return String.format("user %s", user);
}

这时,由于注解String user@PathVariable的参数值为username,所以仍然会将URL变量username的值赋给变量user

 

@RequestParam

@RequestParam和@PathVariable的区别就在于请求时当前参数是在url路由上还是在请求的body上,例如有下面一段代码:

    @RequestMapping(value="", method=RequestMethod.POST)
    public String postUser(@RequestParam(value="phoneNum", required=true) String phoneNum ) String userName) {
        userService.create(phoneNum, userName);
        return "success";
    }

这个接口的请求url这样写:http://xxxxx?phoneNum=xxxxxx,也就是说被@RequestParam修饰的参数最后通过key=value的形式放在http请求的Body传过来,对比下上面的@PathVariable就很容易看出两者的区别了。

 

@RequestBody直接以String接收前端传过来的json数据

=================================

参考资料:

获取URL变量

@RequestParam @RequestBody @PathVariable的作用

end

posted @ 2019-10-10 15:23  Marlon康  阅读(2442)  评论(0编辑  收藏  举报