咱们心愿咱们的参数可能依照咱们构想的、失常的发送到后端接口,然而post、get和各种接参的api容易让人迷糊,上面我说下本人的了解。
1、前端传参形式
传参能够将参数放到header外面,也能够拼到地址中,或者放在body中,不过个别header中只放一些校验的参数。
1.1 get申请
get申请个别只容许在url尾部拼接参数,如http://localhost:9003/mid/app/queryTagByMenu?name=1
get申请也能够将参数放到门路中,如http://localhost:9003/mid/app/queryTagByMenu/1
1.2 post申请
get申请能够将参数放到门路中,如http://localhost:9003/mid/app/queryTagByMenu/1
post申请即能够把参数放到申请体中,也能够把参数拼接到url尾部
2、后端接参形式
2.1 @PathVariable
前端传参如:http://localhost:9003/test/1/chen
,须要应用此注解接管参数。
<code class="java">@RequestMapping("test/{id}/{name}") public void test(@PathVariable("id") Long id ,@PathVariable("name") String name){ System.out.println(id, name); }
2.2 @RequestParam
前端j将参数拼接到url尾部的,如:http://localhost:9003/mid/app/queryTagByMenu?name=1
,须要应用此注解接管参数。
如果应用此注解,则url中必须有这个参数,否则会报400谬误。
<code class="java">@PostMapping("/queryTagByMenu") public AjaxResult queryTagByMenu(@RequestParam String menuId) { if (StringUtil.isEmpty(menuId)) { return AjaxResult.error("短少menuId参数"); } return AjaxResult.success(); }
2.3 @RequestBody
前端应用post形式,将参数写在body中的,能够依照属性名,应用map或者实体类接管。
<code class="java">@PostMapping("/queryMenuByRole") public AjaxResult queryMenuByRole(@RequestBody AppMenuRoleVo appMenuRoleVo) { return AjaxResult.success(appSysService.queryMenuListByRole(appMenuRoleVo)); }
2.4 无注解接管参数
有人说无注解也能够失常接管参数,我试了一下,发现post是无奈接管参数的。
上面试试应用get传参数,发现get是能够主动组装成实体类的。
get申请也实用于单参数无注解的状况。
2.5 @RequestHeader @CookieValue
这两个用法都差不多,我用的比拟少,基本上如果我须要从header中获取参数的话,个别我是从request中获取。
<code class="java">@GetMapping("/test") public void demo3(@RequestHeader(name = "headerName") String headerName, @CookieValue(name = "cookieName") String cookieName) { System.out.println(myHeader + "--" + cookieName); }
看到这里,大家大略对前后端参数传递有了一些理解,欢送留言探讨。
集体博客:https://www.51bishe.site