09. Spring Boot Controller 接受参数的几种常用方式

本文详细介绍了Spring MVC中处理HTTP请求参数的不同方式,包括使用@PathVariable从URL路径中获取参数,@RequestParam用于处理查询参数,@RequestBody用于接收请求体中的JSON数据,@RequestHeader用于获取请求头信息,以及@CookieValue用于读取Cookie值。示例代码展示了如何在实际应用中使用这些注解。
1. 接受参数的几种常用方式
  1. 请求路径参数

    1. @PathVariable

      获取路径参数。即utl/{id}这种形式

      // 访问路径:http://localhost:8080/hello/5
      @RequestMapping(value = "hello/{id}", method = RequestMethod.GET)
      public JsonResult hello(@PathVariable Integer id) {
          return JsonResult.success(null);
      }
      
    2. @RequestParam

      获取查询参数。即url?name=形式

      // 访问路径:http://localhost:8080/hello/hello?id=5
      @RequestMapping(value = "/hello", method = RequestMethod.GET)
      public JsonResult hello(@RequestParam("id") Integer id)  {
          return JsonResult.success(null);
      }
      

      如果传入的参数为空,可以设置为默认的

      // 访问路径:http://localhost:8080/hello/hello?id=5
      @RequestMapping(value = "/hello", method = RequestMethod.GET)
      public JsonResult hello(@RequestParam(value = "id", required = false, defaultValue = 5) Integer id)  {
          return JsonResult.success(null);
      }
      
  2. Body参数@RequestBody

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public JsonResult hello(@RequestBody Person person) {
        return JsonResult.success(null);
    }
    
  3. 请求头参数以及Cookie@RequestHeader@CookieValue

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public JsonResult hello(@RequestHeader(name = "myHeader") String myHeader, @CookieValue(name = "myCookie") String myCookie) {
        return JsonResult.success(null);
    }
    
2. 示例
  1. 获取当前登录人账号

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public JsonResult hello(@RequestHeader(name = "loginUserId") String loginUserId){
        return JsonResult.success(null);
    }
    
  2. 获取request和response

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public JsonResult hello(HttpServletRequest request, HttpServletResponse response){
        return JsonResult.success(null);
    }
    
<think>我们正在讨论Spring BootController接收参数方式。根据引用内容,我们可以总结出以下几种常见方式: 1. 通过查询参数(URL参数)接收:使用@RequestParam注解,适用于URL中?后面的参数。 2. 通过路径变量接收:使用@PathVariable注解,适用于RESTful风格的URL中的变量。 3. 通过表单数据接收:使用@ModelAttribute注解或直接使用POJO对象绑定(无需注解)。 4. 通过请求体接收JSON/XML等数据:使用@RequestBody注解,通常用于POST/PUT请求。 5. 通过请求头接收:使用@RequestHeader注解,获取特定的请求头信息。 6. 通过Cookie接收:使用@CookieValue注解,获取特定的Cookie值。 7. 通过Servlet API的HttpServletRequest对象接收:直接使用HttpServletRequest作为参数,然后通过request.getParameter()等方法获取。 另外,引用中还提到了参数校验,例如使用@Pattern等注解进行校验。 下面我们将逐一介绍这些方式,并给出示例。</think>### Spring Boot Controller 接收参数方式详解 在 Spring Boot 中,Controller 接收 HTTP 请求参数主要通过以下方式实现(根据引用内容整理): #### 1. **查询参数(URL 参数)** 适用于 `?key=value` 格式的 URL 参数,使用 `@RequestParam` 注解: ```java @GetMapping("/user") public String getUser(@RequestParam("id") Long id, @RequestParam(defaultValue = "guest") String name) { return "ID: " + id + ", Name: " + name; } ``` 示例请求:`GET /user?id=123&name=Alice` [^4] #### 2. **路径变量** 适用于 RESTful 风格的 URL 路径参数,使用 `@PathVariable`: ```java @GetMapping("/user/{id}") public String getUserById(@PathVariable("id") Long userId) { return "User ID: " + userId; } ``` 示例请求:`GET /user/123` [^2] #### 3. **表单数据** 接收表单提交的键值对数据,可直接绑定到 POJO 对象: ```java @PostMapping("/register") public String register(User user) { // 自动绑定表单字段到User对象的属性 return "Registered: " + user.getName(); } ``` 支持参数校验(如 `@Pattern`): ```java public class User { @Pattern(regexp = "^\\S{3,20}$") // 3-20位非空字符 private String name; // Getter/Setter } ``` [^3][^4] #### 4. **JSON 请求体** 接收 JSON 格式的请求体,使用 `@RequestBody`: ```java @PostMapping("/create") public ResponseEntity<User> createUser(@RequestBody User user) { // 处理JSON数据 return ResponseEntity.ok(user); } ``` 示例请求体:`{"name":"Alice","age":25}` [^2][^5] #### 5. **请求头参数** 获取特定请求头,使用 `@RequestHeader`: ```java @GetMapping("/info") public String getInfo(@RequestHeader("User-Agent") String userAgent) { return "Client: " + userAgent; } ``` 复杂对象需自定义转换器: ```java @PostMapping("/test") public void handle(@RequestHeader Test test) { System.out.println(test.getName()); } ``` 示例请求:`Header: userInfo: {"name":"zhangsan"}` [^5] #### 6. **Cookie 值** 获取 Cookie 值,使用 `@CookieValue`: ```java @GetMapping("/profile") public String profile(@CookieValue("sessionId") String sessionId) { return "Session: " + sessionId; } ``` [^5] #### 7. **原生 Servlet 对象** 直接操作 `HttpServletRequest` 获取参数: ```java @GetMapping("/search") public String search(HttpServletRequest request) { String keyword = request.getParameter("keyword"); return "Search: " + keyword; } ``` [^5] --- ### 参数接收选择建议 | 场景 | 推荐方式 | 示例注解 | |---------------------|------------------------|-----------------------| | RESTful 资源定位 | 路径变量 | `@PathVariable` | | 筛选条件 | URL 查询参数 | `@RequestParam` | | 提交表单 | 表单绑定对象 | POJO + 字段校验 | | API 交互 (JSON/XML) | 请求体绑定 | `@RequestBody` | | 认证信息 | 请求头 | `@RequestHeader` | | 会话管理 | Cookie | `@CookieValue` | > **最佳实践**: > 1. 优先使用直接绑定 POJO 的方式简化代码 > 2. 关键参数添加校验注解(如 `@NotBlank`, `@Size`) > 3. 明确参数来源(`required=false` 设置可选参数) > 4. 复杂场景结合 `@Valid` 进行嵌套验证[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值