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
英文地址,請注明出處:http://en.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、傳…