转载

@PathVariable/@RequestParam/@RequestBody

如何使用?

1. @PathVariable

(A). 用于将请求URI中的模板变量,映射到方法的参数上,默认情况下,参数名必须要和路径上的变量名一样,@PathVariable注解允许我们使用value或name属性来给参数取一个别名;
@GetMapping(value = "/{advertId}")
public AjaxResult getInfo(@PathVariable("advertId") Long advertId) {...}

// 参数名:userName, 路径上的变量名:name
@GetMapping("/users/{name}/edit"public String edit(@PathVariable("name") String userName) {...}
(B). 如果参数是可选的,则可以在@PathVariable中设置require = false;
@GetMapping("/list/exclude/{deptId}")
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) {...}
(C). 模板变量名需要使用{ }进行包裹,如果方法的参数名与URI模板变量名一致,在@PathVariable中可以省略别名的定义;
@GetMapping("/info/{username}")
public R<LoginUser> info(@PathVariable String username) {...}

2. @RequestParam

(A). 用于将URI中的请求参数,映射到方法的参数上,如果参数是通过list?id=102&name=rocky传递过来的,可以通过@RequestParam来获取。
@PostMapping("/logininfor")
R<Boolean> saveLogininfor(@RequestParam("username") String username, 
						  @RequestParam("status") String status, 
						  @RequestParam("message") String message){...}
(B). 如果传递的参数为空,可以通过defaultValue设置一个默认值;
@PostMapping("/logininfor")
R<Boolean> saveLogininfor(@RequestParam("username") String username, 
						  @RequestParam(value = "status", defaultValue = "1") String status, 
						  @RequestParam("message") String message){...}
(C). 参数中加或者不加@RequestParam的区别
// URI上的参数是可选的
// http://localhost:8080/user01
// http://localhost:8080/user01?userId=102 这两个请求, getUser01这个方法都能被执行。
@GetMapping("/user01")
public String getUser01(int userId) {}
public String getUser01(@RequestParam(value="userId", required = false) int userId) {}

// URI上的参数是必选的
// http://localhost:8080/user02?userId=102 这个请求, getUser02这个方法才能被执行。
@GetMapping("/user02")
public String getUser02(@RequestParam int userId) {}
-(1)不加@RequestParam,前端的参数名需要和后端方法的变量名保持一致才能生效; -(2)不加@RequestParam,说明参数为可选的,加@RequestParam说明参数为必选的,但@RequestParam可以通过@RequestParam(required = false)设置为可选的; -(3)加@RequestParam,可以通过@RequestParam(“userId”)或者@RequestParam(value = “userId”)指定传入的参数名,或者直接使用@RequestParam,但是必须要求前后端保持一致;

3. @RequestBody

(A). 用于读取请求的body数据,使用系统默认配置的HttpMessageConverter 进行解析,然后把相应的数据映射到方法的参数上。一般情况下来说常用来处理application/json类型的内容,或者粗鲁的说:将请求体中的JSON数据绑定到方法对应的BEAN上。
@PostMapping("/operlog")
R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog){}
(B). @RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
 
正文到此结束
Loading...