SpringBoot参数请求方式

我们希望我们的参数能够按照我们设想的、正常的发送到后端接口,但是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尾部

SpringBoot参数请求方式_第1张图片

2、后端接参方式

2.1 @PathVariable

前端传参如:http://localhost:9003/test/1/chen,需要使用此注解接收参数。

@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错误。

@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或者实体类接收。

@PostMapping("/queryMenuByRole")
public AjaxResult queryMenuByRole(@RequestBody AppMenuRoleVo appMenuRoleVo) {
  return AjaxResult.success(appSysService.queryMenuListByRole(appMenuRoleVo));
}
2.4 无注解接收参数

有人说无注解也可以正常接收参数,我试了一下,发现post是无法接收参数的。

SpringBoot参数请求方式_第2张图片

SpringBoot参数请求方式_第3张图片

下面试试使用get传参数,发现get是可以自动组装成实体类的。

get请求也适用于单参数无注解的情况。

SpringBoot参数请求方式_第4张图片

SpringBoot参数请求方式_第5张图片

2.5 @RequestHeader @CookieValue

这两个用法都差不多,我用的比较少,基本上如果我需要从header中获取参数的话,一般我是从request中获取。

@GetMapping("/test")
public void demo3(@RequestHeader(name = "headerName") String headerName,
  @CookieValue(name = "cookieName") String cookieName) {
    System.out.println(myHeader + "--" + cookieName);
}

看到这里,大家大概对前后端参数传递有了一些了解,欢迎留言讨论。

个人博客: https://www.51bishe.site

你可能感兴趣的:(java)