年后开工的第一天总是闲到没事情干的。于是自己给自己找事情做——code Review!
看到一个接口的代码的时候有了以下疑惑:同样是根据某个字段(该字段是一个类似id、手机号、身份证号性质一样的字段)去进行列表查询,怎么前面的一个接口用@Pathvaribale后面一个接口却又用@RequestParam呢?
为什么呢?
分析
先从多方面来对比一下两者。
请求路径url:
@PathVariable:xxx/xxx/{phone}
@RequestParam:xxx/xxx?phone=15515916834&name=张三
请求方式:
两个注解都是适用于restful风格下的@GetMapping、@DeleteMapping、@PutMapping、@PostMapping。
请求参数:
@PathVariable:一般适用于只有一个请求参数的情况下使用。比如:根据user的id查询User详情/根据宿舍号查询宿舍成员列表
@RequestParam:可以多个。但据同事说这玩意在前端也有上限,大小好像是不超过2M。而且入参数量太多一般建议改成封装进一个请求体里面用@RequestBody,也就是用JSON字符串的方式来请求。
两者相同之处:
-
都是用来做传参的。
-
效果也都一样。
不同之处:
1.传参的方式不一样:地址上传参(@Pathvariable)和协议上携带参数(@RequestParam)。
2.如果以后这个接口未来参数会有变化(有可能不只一个参数),那就不要用 @PathVariable 的形式。
第二点为什么这么说呢?
@RequestParam和@pathVariable都可以传多个参数。但是@PathVariable更适合请求参数只有一个的情况下。@RequestParam和@pathVariable都可以传多个参数,那为什么当多个参数的时候,要用@RequestParam呢?因为要符合restful风格规范