SpringBoot - @PathVariable/@RequestParam/@RequestBody注解使用详解

作用是什么?

@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()可以有多个。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值