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.pswp.cn/news/914977.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSPF路由协议的协商过程

OSPF的知识点非常多&#xff0c;协议过程也是一个不大不小的知识点&#xff0c;今天就简单的说一下&#xff0c;OSPF是如何进行协商的。OSPF&#xff08;Open Shortest Path First&#xff09;协议是一种用于路由选择的动态链路状态协议&#xff0c;是大型网络普遍使用的动态路…

MySql:索引,结构

文章目录注意事项结构注意事项 主键字段在建表时&#xff0c;会自动创建主键索引添加唯一约束时&#xff0c;数据库实际上会添加唯一索引。 解释&#xff1a; 增&#xff1a;创建&#xff1a; create [unique] index 索引名 on 表名 (字段名……)&#xff1b;-- 举例 :给tb…

ts学习2

JavaScript 中的每个值都有一组行为&#xff0c;您可以通过运行不同的操作来观察这些行为。这听起来很抽象&#xff0c;但作为一个简单的例子&#xff0c;考虑我们可能在名为 message 的变量上运行的一些操作。 // Accessing the property toLowerCase // on message and then…

k8s环境使用Operator部署Seaweedfs集群(下)

作者&#xff1a;闫乾苓 文章目录4.4.3 部署seaweedfs集群4.4.4 验证集群运行状态4.4.5 测试集群功能4.4.3 部署seaweedfs集群 集群Yaml示例 apiVersion: seaweed.seaweedfs.com/v1 kind: Seaweed metadata:name: seaweed1namespace: default spec:image: chrislusf/seaweedf…

【橘子分布式】gRPC(理论篇)

一、简介 我们在前面学习了thrift rpc的知识&#xff0c;我们从其中接触到了IDL&#xff0c;编解码协议&#xff0c;服务的远程调用(调用远程服务就像在在本地调用一样)等各种概念。 其实我个人对thrift的使用并不多&#xff0c;我更多的是使用今天我们要提到的一个RPC框架称之…

OSPF高级特性之GR

一、概述OSPF GR(Graceful Restart),在路由器发生故障或管理员干预的情况下重启了OSPF进程时,重新构建控制平面时,转发平面不受影响,仍可以正常转发数据。在我们OSPF网络环境当中,假设路由器为框式路由器,通常框式路由器有多个主控板,当主主控板发生故障时会切换到备主控板上。…

iOS 构建配置与 AdHoc 打包说明

iOS 构建配置与 AdHoc 打包说明 1. 背景 在 iOS 项目中&#xff0c;通常需要支持 多个环境的构建和分发&#xff0c;比如&#xff1a; 开发环境 (Debug) → 本地调试内测环境 (AdHoc) → 提供 QA / 产品经理测试预发布环境 (AdHoc_Release) → 和正式版配置一致&#xff0c;但通…

【52】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码

文章目录1 完整 功能展示2 添加控件变量及声明2.1 添加控件及变量2.2 SerialPortDlg.h: 头文件3 函数实现3.1 数据发送3.1.2 写数据、字符串转3.2 发送文件3.2.1 打开文件3.2.2 发送文件3.3 清空发送区4 完整MFC项目项下载1 完整 功能展示 串口通信助手 页面展示&#xff0c;功…

笔试——Day12

文章目录第一题题目思路代码第二题题目&#xff1a;思路代码第三题题目&#xff1a;思路代码第一题 题目 删除公共字符 思路 模拟&#xff1a; 遇到需要删除的字符&#xff0c;则不添加到结果中 代码 第二题 题目&#xff1a; 两个链表的第一个公共结点 思路 模拟&#x…

SpringMVC @ResponseBody注解详解

概要ResponseBody是 Spring MVC 中的一个重要注解&#xff0c;用于指示方法的返回值应该直接作为 HTTP 响应体返回&#xff0c;而不是解析为视图名称。基本功能ResponseBody主要用于将Java对象转换为HTTP响应体&#xff08;通常是JSON或XML&#xff09;绕过视图解析器直接返回数…

剑指offer——模拟:顺时针打印矩阵

模拟vector.size返回的是矩阵的行数&#xff0c;vector[0].size返回的是矩阵的列数先排除传入的矩阵是空矩阵先计算上下左右的边界只要边界不重合&#xff0c;就不停止输出&#xff0c;完成一个部分的打印&#xff0c;就将当前的一个边界回收不可以在for循环结束的时候一起判断…

electron-vite实践成品项目

羊驼的工具箱 项目地址 推荐使用该版本 并且使用yarn进行安装 node版本:v22.16.0 技术栈&#xff1a;electron vue3 vite pinia vuetify3 sequelize sqlite Q:为什么vue3要用 vue2的写法 A:其实是因为刚开始用vue3的写法感觉超级恶心 对属性的赋值和方法的管理可观性…

自学中医笔记(一)

我的中医自学笔记 Q&A 自学原因&#xff1a;最开始我也不太信中医&#xff0c;我室友也说中医太玄学了。由于我从小一直都很瘦&#xff0c;吃饭每次都吃得少&#xff0c;上大学那会儿171cm最多也才101斤&#xff0c;而且一年胃病要犯好几次&#xff0c;后来无意中收获了一篇…

3.1 WPF画折线图、直方图、饼状图

本文看了博客WPF编程&#xff0c;Live Charts使用说明&#xff08;2&#xff09;——使用_func<chartpoint, string> labelpoint-CSDN博客&#xff0c;这里作为笔记用。 1.前端代码 前端XAML文件代码如下&#xff1a; <Window x:Class"livechart1.MainWindow&…

如何通过ATS/HTTPS数据防篡改来加密视频?

文章目录前言一、什么是ATS/HTTPS数据防篡改&#xff1f;二、ATS/HTTPS数据防篡改的实现原理三、如何零代码实现ATS/HTTPS数据防篡改来加密视频总结前言 未经保护的视频流极易在传输途中遭遇窃听、拦截或恶意篡改&#xff0c;不仅损害内容价值&#xff0c;更可能引发严重的安全…

Python并发模型:多线程与多进程的优劣对比与实战应用

文章目录多线程基础概念多进程基础概念多线程的优劣势多进程的优劣势实战应用&#xff1a;网络爬虫实战应用&#xff1a;图像处理Python作为一门功能强大的编程语言&#xff0c;提供了多种并发模型&#xff0c;使得我们能够在同一时间执行多个任务&#xff0c;从而提高程序的执…

Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解

Spring Boot 整合 Nacos 教程&#xff08;3000字&#xff09; 一、Nacos 简介 Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台&#xff0c;致力于帮助开发者更轻松地构建云原生应用。它支持多种注册中心协议&#xff08;如 Dubbo、Spring Cloud、Kubernete…

VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)

安装 VMware 17.5.1 centos 7.9 ​ 1、下载资源包&#xff08;虚拟机镜像&#xff09; VMware-17.5.1 安装包秘钥.zipLinux Centos 7.9 镜像 2、centos 7.9 下载地址 1、Centos 官网 2、阿里巴巴镜像站 3、查看网络命令 ifconfig 或 ip addr 4、登陆服务器 ssh stark192.168.3…

STM32超声波模块

一&#xff1a;超声波模块1&#xff1a;工作原理采用IO触发测距&#xff0c;给至少10us的高电平信号。 模块自动发送8个40KHz的方波&#xff0c;自动检测是否有信号返回。 有信号返回&#xff0c;通过IO输出一高电平&#xff0c;高电平持续时间就是超声波从发射到返回的时间声波…

RK3568项目(十一)--linux驱动开发之mipi屏幕调试

目录 一、引言 二、MIPI DSI 屏幕 ------>2.1、MIPI联盟 ------------>2.1.1、多媒体部分 ------------>2.1.2、硬件协议 ------------>2.1.3、D-PHY功能模式及速率 ------------>2.1.4、分辨率计算 ------>2.2、MIPI-DSI硬件连接 ------>2.3、传…