当前位置: 首页 > news >正文

Spring核心注解@RequestMapping详解

@RequestMappingSpring Framework 中一个核心注解,用于在 Spring MVC(或 Spring WebFlux)中将 HTTP 请求映射到特定的处理器(Controller 中的方法)或处理器类。它告诉 Spring 框架:当一个匹配特定条件的 HTTP 请求到达时,应该调用哪个方法来处理该请求。

简单来说,它是定义 Web 请求端点(API 接口)的基础

以下是 @RequestMapping 的关键功能和用法:

  1. 映射位置:

    • 类级别: 标注在 Controller 类上,为该类中所有处理器方法提供一个公共的 URL 路径前缀
    • 方法级别: 标注在 Controller 类内部的方法上,定义该方法的具体映射路径(相对于类级别的路径)和处理逻辑。通常一个方法处理一个具体的请求。
  2. 映射内容(属性):
    @RequestMapping 接受多个属性来精确指定它要匹配的请求特征:

    • valuepath (最常用): 指定请求的 URL 路径模式。支持 Ant 风格通配符 (*, **, ?) 和路径变量 ({variable})。
      @RequestMapping("/users") // 类级别前缀
      @RestController
      public class UserController {@RequestMapping("/profile") // 实际映射到 /users/profilepublic String userProfile() { ... }@RequestMapping("/orders/{orderId}") // 路径变量public String getOrder(@PathVariable String orderId) { ... }
      }
      
    • method 指定请求的 HTTP 方法 (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS 等)。这是定义 RESTful 风格 API 的关键。
      @RequestMapping(value = "/users", method = RequestMethod.POST) // 只处理 POST /users
      public User createUser(@RequestBody User user) { ... }@RequestMapping(value = "/users/{id}", method = RequestMethod.GET) // 只处理 GET /users/{id}
      public User getUser(@PathVariable Long id) { ... }
      
    • params 要求请求必须包含特定的请求参数,或者参数具有特定值。支持表达式 (=, !=, ! 存在)。
      @RequestMapping(value = "/search", params = "q") // 必须有 q 参数
      public List<User> searchUsers(@RequestParam String q) { ... }@RequestMapping(value = "/activate", params = "token=valid") // 必须有 token 参数且值为 'valid'
      public void activateAccount() { ... }
      
    • headers 要求请求必须包含特定的 HTTP 头信息,或者头信息具有特定值。
      @RequestMapping(value = "/data", headers = "X-Custom-Header=MyValue") // 需要特定自定义头
      public String getData() { ... }@RequestMapping(value = "/pdf", headers = "Accept=application/pdf") // 要求 Accept 头包含 pdf
      public ResponseEntity<byte[]> getPdf() { ... }
      
    • consumes 指定处理器方法能够接收(消费)的请求内容类型 (Content-Type)。例如 application/json, application/xml
      @RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json")
      public User createUserJson(@RequestBody User user) { ... } // 只处理 Content-Type 为 JSON 的 POST
      
    • produces 指定处理器方法返回的响应内容类型 (Content-Type)。客户端可以通过 Accept 头来匹配。
      @RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = "application/json")
      public User getUserJson(@PathVariable Long id) { ... } // 返回 JSON@RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = "application/xml")
      public User getUserXml(@PathVariable Long id) { ... } // 返回 XML (同一个路径不同返回类型)
      
  3. 组合注解 (更简洁的替代):
    为了简化常见 HTTP 方法的映射,Spring 提供了基于 @RequestMapping组合注解(元注解)。它们内部已经设置了 method 属性,语法更简洁:

    • @GetMapping = @RequestMapping(method = RequestMethod.GET)
    • @PostMapping = @RequestMapping(method = RequestMethod.POST)
    • @PutMapping = @RequestMapping(method = RequestMethod.PUT)
    • @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)
    • @PatchMapping = @RequestMapping(method = RequestMethod.PATCH)
      现代 Spring Boot 应用中,推荐优先使用这些组合注解,代码更清晰。
  4. 工作原理:
    当一个 HTTP 请求到达 DispatcherServlet(Spring MVC 前端控制器)时:

    • DispatcherServlet 会查询一个或多个 HandlerMapping 组件。
    • HandlerMapping 组件(如 RequestMappingHandlerMapping)负责检查所有带有 @Controller@RestController 注解的类及其方法上的 @RequestMapping(或组合注解)定义。
    • 它会根据请求的 URL 路径、HTTP 方法、请求头、参数、内容类型等,找到最匹配的处理器方法(HandlerMethod)。
    • 找到匹配的方法后,DispatcherServlet 就会调用该方法来处理请求并生成响应。

总结:

  • @RequestMapping 是 Spring MVC 中定义请求处理入口的核心注解。
  • 它通过 path/value, method, params, headers, consumes, produces 等属性精确匹配传入的 HTTP 请求。
  • 可以放在类上(定义公共前缀)和方法上(定义具体端点)。
  • 组合注解 (@GetMapping, @PostMapping 等) 是更简洁、更现代的写法,推荐优先使用。
  • 它是构建 RESTful API 和传统 Web 控制器的基础。

理解 @RequestMapping 是掌握 Spring Web 开发的关键第一步。

http://www.dtcms.com/a/282760.html

相关文章:

  • Java 二维数组详解:从基础语法到实战应用,彻底掌握多维数据结构
  • 边缘计算革命:AWS Snowcone在智慧工厂的落地实践(2025工业4.0实战指南)
  • 笔试——Day10
  • 【AI交叉】天文学:人工智能如何赋能星辰大海的探索
  • 如何关闭Elasticsearch的安全认证的解决方法
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • 基于深度学习的情感分析模型:从文本数据到模型部署
  • leetcode:990.等式方程的可满足性[图]
  • 推荐《Python 编程:从入门到实践》之Python编程的基础知识
  • 经典算法之基数排序
  • 算法精讲--正则表达式(二):分组、引用与高级匹配技术
  • 基站前传卡 加速卡 EU
  • 一个项目的完整一生 --- 一 窗口大小设置
  • NW956NW961美光固态闪存NW964NW968
  • 如何建立一個單一產品的 Shopify 商店
  • 倪海厦全套下载,八纲辨证,人纪,天纪,针灸,电子版
  • lesson15:Python的文件操作
  • Java-数构栈与队列
  • 第三次mysql作业
  • C# 8.0 创建一个简单的控制台应用程序
  • Python 进阶学习之全栈开发学习路线
  • 电力名词通俗解析5:计量系统
  • 电力名词通俗解析4:电网DCS与SCADA系统通俗解释
  • adb性能测试命令
  • State
  • PXE实现Ubuntu,rockylinux,almalinux全自动安装
  • Apache CXF 漏洞曝光:存在拒绝服务与数据泄露双重风险
  • HTTP性能优化汇总
  • 分布式光伏气象站:光伏产业的智慧守护者
  • linux系统离线升级git版本 git-2.36.1