在路由中定义变量规则后,通常我们需要在处理方法(也就是@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