传参-@PathVariable注解、@RequestParam注解、@RequestBody注解和@RequestHeader注解

本文详细介绍了SpringMVC框架中四个常用的请求参数注解:@PathVariable用于URL路径中的变量,@RequestParam用于查询参数,@RequestBody处理请求体数据,@RequestHeader获取请求头信息。它们的区别和使用场景得以阐述。

目录

1.@PathVariable 注解:

2.@RequestParam 注解:

 3.@RequestBody注解:

4.@RequestHeader注解 


@PathVariable 注解和 @RequestParam 注解是 Spring MVC 中用于处理请求参数的注解,但它们在用法和作用上有一些区别。

  1. @PathVariable 注解:

    • 用于从请求的 URL 路径中提取变量的值
      @PathVariable 注解:
    • 用于从请求的 URL 路径中提取变量的值。
    • 通常用于 RESTful API 中,用于获取路径中的参数。
    • 可以指定路径变量的名称,将其值映射到方法中的参数上。
    • 示例:
      @GetMapping("/users/{id}")
      public User getUserById(@PathVariable("id") int userId) {
          // 根据 userId 获取用户信息
          // ...
      }

      在上述示例中,{id} 是 URL 路径中的占位符,@PathVariable("id") 表示将路径中的 id 变量的值绑定到方法参数 userId 上。

2.@RequestParam 注解:

  • 用于从请求的查询参数中获取参数的值
  • 可以指定查询参数的名称,将其值映射到方法中的参数上。
  • 默认情况下,@RequestParam 注解要求参数必须提供,但可以通过设置 required=false 来将其设置为可选参数。
  • 示例:
    @GetMapping("/users")
    public List<User> getUsersByRole(@RequestParam("role") String role) {
        // 根据角色获取用户列表
        // ...
    }

    在上述示例中,role 是查询参数的名称,@RequestParam("role") 表示将查询参数 role 的值绑定到方法参数 role 上。

总结:

  • @PathVariable 用于获取 URL 路径中的变量值。
  • @RequestParam 用于获取请求的查询参数的值。
  • @PathVariable 适用于将参数作为路径的一部分传递,而 @RequestParam 适用于将参数作为查询参数传递。
  • @PathVariable 默认情况下要求参数必须提供,而 @RequestParam 默认情况下也要求参数必须提供,但可以设置为可选参数。

http://example.com/api?name=John&age=25

在上述例子中,请求参数的值为name=Johnage=25

 3.@RequestBody注解:

    用于将请求的 JSON 或 XML 数据绑定到方法的参数上。

  • 适用于接收请求体中的数据,通常用于处理 POST 或 PUT 请求。
  • 示例:
    @RestController
    @RequestMapping("/api")
    public class ProductController {
        
        @PostMapping("/products")
        public ResponseEntity<Product> createProduct(@RequestBody Product product) {
            // 处理接收到的产品数据
            // ...
            
            // 返回创建的产品信息
            return ResponseEntity.ok(product);
        }
    }

    在上述示例中,@PostMapping("/products") 表示处理 POST 请求的 /api/products 路径。方法的参数 @RequestBody Product product 表示将请求体中的 JSON 或 XML 数据绑定到 Product 类型的 product 参数上

    当发送 POST 请求到 /api/products 路径时,请求体中的 JSON 或 XML 数据将被自动解析,并绑定到 product 参数中。您可以在方法中对接收到的产品数据进行处理,例如保存到数据库或进行其他操作。然后,通过 ResponseEntity.ok(product) 返回包含创建的产品信息的响应。

    假设 Product 类的定义如下:

    public class Product {
        private String name;
        private double price;
        
        // 省略构造函数和其他方法
        
        // Getter 和 Setter 方法
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }
        
        public double getPrice() {
            return price;
        }
        
        public void setPrice(double price) {
            this.price = price;
        }
    }

    如果请求的 JSON 数据为 {"name": "手机", "price": 999.99},经过 @RequestBody 注解的处理,Product 对象的 name 属性将被设置为 "手机",price 属性将被设置为 999.99。

    在 createProduct 方法中,如果执行了类似 return ResponseEntity.ok(product) 的语句,它将返回一个包含创建的产品信息的响应。在这种情况下,如果产品对象的 name 属性被设置为 "手机",price 属性被设置为 999.99,那么响应的主体将是 {"name": "手机", "price": 999.99}

    请注意,具体的出参内容和格式会根据您的代码实现和其他配置而有所不同。上述例子仅提供了一种可能的结果。

4.@RequestHeader注解 

  • 用于获取请求头中的参数值。
  • 可以指定请求头参数的名称,将其值映射到方法的参数上。
  • 示例:
    @RestController
    @RequestMapping("/api")
    public class UserController {
        
        @GetMapping("/users")
        public ResponseEntity<List<User>> getUsers(@RequestHeader("Authorization") String authorization) {
            // 处理授权信息
            // ...
            
            // 返回用户列表
            List<User> userList = userService.getUsers();
            return ResponseEntity.ok(userList);
        }
    }

    在上述示例中,@GetMapping("/users") 表示处理 GET 请求的 /api/users 路径。方法的参数 @RequestHeader("Authorization") String authorization 表示将请求头中的 Authorization 参数的值绑定到 authorization 参数上

Content-Type: application/json

这里的Content-Type就是请求头

当发送 GET 请求到 /api/users 路径时,@RequestHeader("Authorization") 注解将从请求头中获取 Authorization 参数的值,并将其绑定到 authorization 参数上。您可以在方法中处理该授权信息,例如进行验证或其他操作。

在示例中,通过 ResponseEntity.ok(userList) 返回一个包含用户列表的成功响应。具体的出参内容和格式会根据您的代码实现和其他配置而有所不同。

请注意,@RequestHeader 注解还可以用于绑定其他请求头参数的值,您可以根据实际情况选择适合的注解和参数类型来处理请求头中的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小懒懒

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值