欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC接受参数 SpringBoot接收参数 Controller接收参数

程序员文章站 2024-03-23 18:03:16
...

Spring MVC 接收参数

一、接收参数常用注解

注解 支持类型 支持请求类型 支持的Content-Type 请求示例
@PathVariable url Get all /orders/{id}
@RequestParam url Get all /orders?id=abc
- Body Post/Put/Delete/Patch form-data,x-www.form-urlencoded
@RequestBody Body Post/Put/Delete/Patch json {“name”:"Zhang ",“age”:18}

对于一些非必填参数,可以使用required 关键字来标识,同时必须设置默认值defaultValue

如getOrder方法中对price 参数的获取:

/**
* Get请求的参数可以通过@PathVariable和@RequestParam获取
* @param id 必填
* @param name 必填
* @param price 选填,默认值为0
* @return
*/
@GetMapping("/orders/{id}")
public String getOrder(@PathVariable(value = "id")Integer id,
                       @RequestParam(value = "name")String name,
                       @RequestParam(value = "price",required = false,defaultValue = "0") Integer price)
{
  String result = "id:"+id+",name:"+name+",price:"+price;
  return result;
}

参数可以不配注解直接和Entity类绑定,但是不支持json格式,仅支持form-data和x-www.form-urlencoded格式

@PostMapping("/order/")
public String addorder(Order order)

二、请求路径参数

仅支持Get请求

1. @PathVariable

获取请求路径。例如:url/{id} 形式。

2. @RequestParam

获取查询参数。例如:url?id=123&name=zhangsan 形式。

范例:

GET请求
http://localhost:8080/demo/123?name=zhangsan

服务端Java代码:

@GetMapping("/demo/{id}")
public void demo(@PathVariable(name = "id") String id, @RequestParam(name = "name") String name) {
    System.out.println("id="+id);
    System.out.println("name="+name);
}
//PathVariable匹配路径参数,RequestParam匹配?后参数

三、Body 参数

支持Post/Put/Delete/Patch请求

1. @RequestBody

前端请求:

#post请求
#参数:
{
  "name":"zhangsan",
  "age":18
}
#参数类型:
`Content-Type=application/json`
#api:
http://localhost:8080/demo1

后台接收:

@PostMapping("/demo1")
public void demo1(@RequestBody User user) {
    // 输出:User{name='zhangsan', age=18}
    System.out.println(user.toString());
}
// 或者使用map接收
@PostMapping("/demo1")
public void demo1(@RequestBody Map<String, String>user) {
    // 输出:zhangsan
    System.out.println(user.get("name"));
}

2. 无注解

前端请求:

#post请求
#参数:
{
  "name":"zhangsan",
  "age":18
}
#参数类型:
`Content-Type=form-data`
#api:
http://localhost:8080/demo2

后台接收:

@PostMapping("/demo2")
public void demo2(User user) {
    // User{name='zhangsan', age=18}
    System.out.println(user.toString());
}

3. 其他参数类型

multipart/form-datax-www-fom-urlencoded的区别:

  • multipart/form-data:可以上传文件或者键值对,最后都会转化成一条消息。
  • x-www-fom-urlencoded:只能上传键值对,而且键值对都是通过&间隔分开的。

四、请求头参数以及Cookie

  1. @RequestHeader
  2. @CookieValue

范例:

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

@GetMapping("/demo3")public void demo3(HttpServletRequest request) {    System.out.println(request.getHeader("myHeader"));    for (Cookie cookie : request.getCookies()) {        if ("myCookie".equals(cookie.getName())) {            System.out.println(cookie.getValue());        }    }}