Spring MVC 請求類型注解詳解

Spring MVC 請求類型注解詳解


1. 核心注解分類

Spring MVC 中的請求處理注解分為以下幾類:

類別注解示例作用范圍
方法級注解@RequestMapping, @GetMapping方法級別
參數級注解@RequestParam, @RequestBody方法參數
模型/會話注解@ModelAttribute, @SessionAttributes方法或類級別

2. 方法級注解詳解
@RequestMapping

功能:定義請求映射規則,支持所有 HTTP 方法。

屬性列表

屬性說明示例
method指定支持的 HTTP 方法(如 RequestMethod.GET)。method = RequestMethod.POST
value請求路徑(可省略,與 path 等效)。value = "/user"path = "/user"
params條件過濾:請求參數需滿足指定條件(如 param1, !param2)。params = {"name", "!age"}
headers條件過濾:HTTP 頭需滿足指定條件(如 User-Agent:Chrome)。headers = "Content-Type=application/json"
consumes限制請求內容類型(如 MediaType.APPLICATION_JSON_VALUE)。consumes = MediaType.APPLICATION_JSON_VALUE
produces限制響應內容類型(如 text/html)。produces = "text/html"

@GetMapping / @PostMapping 等

功能@RequestMapping 的簡化版,按 HTTP 方法分類:

  • @GetMapping:對應 method = RequestMethod.GET
  • @PostMapping:對應 method = RequestMethod.POST
  • @PutMapping:對應 method = RequestMethod.PUT
  • @DeleteMapping:對應 method = RequestMethod.DELETE
  • @PatchMapping:對應 method = RequestMethod.PATCH

3. 參數級注解詳解
@RequestParam

功能:綁定 URL 查詢參數或表單參數到方法參數。

屬性列表

屬性說明示例
value參數名稱(可省略,與 name 等效)。value = "id"name = "id"
required是否必須(默認 true)。required = false
defaultValue參數缺失時的默認值。defaultValue = "0"

示例

@GetMapping("/user")
public String getUser(@RequestParam("id") int userId) { ... }

@PathVariable

功能:綁定 URL 路徑中的變量到方法參數。

屬性列表

屬性說明示例
value路徑變量名稱。value = "id"
required是否必須(默認 true)。required = false

示例

@GetMapping("/user/{id}")
public String getUser(@PathVariable("id") String userId) { ... }

@RequestBody

功能:將 HTTP 請求體(如 JSON/XML)反序列化為 Java 對象。

屬性

  • 無顯式屬性,直接用于方法參數。
  • 依賴 MappingJackson2HttpMessageConverter(JSON)或自定義轉換器。

示例

@PostMapping("/user")
public User createUser(@RequestBody User user) { ... }

@RequestHeader

功能:綁定 HTTP 請求頭到方法參數。

屬性列表

屬性說明示例
value請求頭名稱。value = "User-Agent"
required是否必須(默認 true)。required = false
defaultValue缺省值。defaultValue = "unknown"

示例

@GetMapping("/headers")
public String getHeaders(@RequestHeader("User-Agent") String userAgent) { ... }

@CookieValue

功能:綁定 Cookie 值到方法參數。

屬性列表

屬性說明示例
valueCookie 名稱。value = "JSESSIONID"
required是否必須(默認 true)。required = false
defaultValue缺省值。defaultValue = "not-set"

示例

@GetMapping("/cookie")
public String getCookie(@CookieValue("theme") String theme) { ... }

4. 模型/會話注解
@ModelAttribute

功能

  1. 方法級:在目標方法執行前預處理模型數據(如填充對象)。
  2. 參數級:將請求參數綁定到 Java 對象。

示例

// 方法級:預加載數據
@ModelAttribute("user")
public User getUser() {return new User();
}// 參數級:綁定參數到對象
@PostMapping("/user")
public String saveUser(@ModelAttribute User user) { ... }
@SessionAttributes

功能:將模型屬性存儲到 HTTP Session。

屬性

  • value:需存儲的屬性名列表(如 {"user"})。
  • types:需存儲的屬性類型列表。

示例

@Controller
@SessionAttributes({"user"})
public class UserController { ... }

5. 文件上傳注解
@RequestPart

功能:處理多部分請求中的文件或參數(結合 @RequestParam)。

示例

@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) { ... }

6. 總結表格
注解類型注解名稱作用參數示例
方法級@RequestMapping定義請求映射規則(路徑、方法、條件等)。method = POST, consumes = "application/json"
HTTP 方法專用@GetMapping僅處理 GET 請求。/user/{id}
參數綁定@RequestParam綁定查詢參數或表單參數。@RequestParam("id") int userId
路徑變量@PathVariable綁定 URL 路徑中的變量。@PathVariable("id") String userId
請求體@RequestBody反序列化請求體為對象。@RequestBody User user
HTTP 頭@RequestHeader綁定請求頭值。@RequestHeader("User-Agent") String agent
Cookie@CookieValue綁定 Cookie 值。@CookieValue("theme") String theme
模型/會話@ModelAttribute綁定對象或預加載模型數據。@ModelAttribute User user
文件上傳@RequestPart處理多部分請求中的文件或參數。@RequestPart("file") MultipartFile file

關鍵總結

  1. 方法級注解:定義請求路徑和條件,優先使用 @GetMapping 等 HTTP 方法專用注解。
  2. 參數級注解:根據數據來源(路徑、請求體、請求頭等)選擇對應注解。
  3. 模型/會話@ModelAttribute 用于對象綁定和預處理,@SessionAttributes 管理會話數據。
  4. 最佳實踐
    • 使用 @RequestBody 處理 JSON/XML 請求體。
    • 通過 @RequestParam@PathVariable 精確控制參數來源。
    • 結合 @Valid 注解實現參數校驗(需 @ControllerAdvice 處理異常)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/901346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/901346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#: DxF文件中Spline解析

以下是使用C#解析DXF文件中Spline(樣條曲線)的完整代碼示例,使用流行的netDxf庫來處理DXF文件: 1. 安裝netDxf庫 首先通過NuGet安裝netDxf庫: Install-Package netDxf 2. 完整Spline解析代碼 using System; using System.Collections.Ge…

【軟考系統架構設計師】系統架構設計知識點

1、 從需求分析到軟件設計之間的過渡過程稱為軟件架構。 軟件架構為軟件系統提供了一個結構、行為和屬性的高級抽象,由構件的描述、構件的相互作用(連接件)、指導構件集成的模式以及這些模式的約束組成。 軟件架構不僅指定了系統的組織結構和…

二.springBoot項目集成ElasticSearch及使用

二.springBoot項目集成ElasticSearch及使用 1.依賴引入2.ElasticSearch常見用法 1.依賴引入 <!--elasticsearch搜索引擎--> <!--高版本7.0后TransportClient已被淘汰&#xff0c;用rest-high-level-client代替--> <dependency><groupId>org.elasticse…

微服務多模塊構建feign項目過程與一些報錯(2025詳細版)

目錄 1.eureka-server的注意事項 2.eureka-feign的注意事項 3.多模塊構建feign項目過程 3.1創建父項目 3.2創建子項目eureka-server 3.3創建子項目eureka-provider 3.4創建子項目eureka-feign 3.5運行 給個點贊謝謝 1.eureka-server的注意事項 eureka-server的yml文件…

第十一屆 藍橋杯 嵌入式 省賽

一、分析 本屆的風格又變了一番&#xff0c;但是難度也降低了些。 又是考察了 PWM 和 ADC。 第八、九屆也考察了 PWM。建議先復習這兩屆&#xff0c;再回來模擬。 LCD的顯示也提了額外的要求。 1. 功能概述 電位器 R37 輸出的模擬電壓信號 PA6輸出頻率固定&#xff0c;占…

小試牛刀-抽獎程序

編寫抽獎程序 需求&#xff1a;設計一個抽獎程序&#xff0c;點擊抽獎按鈕隨機抽取一個名字作為中獎者 目標&#xff1a;了解項目結構&#xff0c;簡單UI布局&#xff0c;屬性方法、事件方法&#xff0c;程序運行及調試 界面原型 ? 待抽獎&#xff1a; 點擊抽獎按鈕&#x…

代碼隨想錄算法訓練營day2(數組)

華子目錄 長度最小的子數組思路 螺旋矩陣思路總結 長度最小的子數組 https://leetcode.cn/problems/minimum-size-subarray-sum/ 思路 使用滑動窗口&#xff0c;left表示滑動窗口的起始點&#xff0c;right表示滑動窗口的終點 class Solution:def minSubArrayLen(self, targ…

6.1 GitHub億級數據采集實戰:雙通道架構+三級容災設計,破解API限制與反爬難題

GitHub 項目數據獲取功能設計與實現 關鍵詞:GitHub API 集成、網頁爬蟲開發、數據存儲設計、定時任務調度、異常處理機制 1. 數據獲取架構設計 采用雙通道數據采集策略,同時使用 GitHub 官方 API 和網頁爬蟲技術確保數據完整性: #mermaid-svg-XUg7xhHrzFAozG4J {font-fami…

設計模式(結構型)-橋接模式

目錄 摘要 定義 類圖 角色 具體實現 優缺點 優點 缺點 使用場景 使用案例 JDBC 和橋接模式 總結 摘要 在軟件開發領域&#xff0c;隨著系統規模和復雜性的不斷攀升&#xff0c;如何設計出具有良好擴展性、靈活性以及可維護性的軟件架構成為關鍵挑戰。橋接模式作為一…

Go 微服務框架 | 中間件

文章目錄 定義中間件前置中間件后置中間件路由級別中間件 定義中間件 中間件的作用是給應用添加一些額外的功能&#xff0c;但是不會影響原有應用的編碼方式&#xff0c;想用的時候直接添加&#xff0c;不想用的時候也可以輕松去除&#xff0c;實現所謂的可插拔。中間件的實現…

leetcode 198. House Robber

本題是動態規劃問題。 第一步&#xff0c;明確并理解dp數組以及下標的含義 dp[i]表示從第0號房間一直到第i號房間(包含第i號房間)可以偷到的最大金額&#xff0c;具體怎么偷這里不考慮&#xff0c;第i1號及之后的房間也不考慮。換句話說&#xff0c;dp[i]也就是只考慮[0,i]號…

掌趣科技前端面試題及參考答案

你使用 Vue 的頻率如何,用得比較多嗎? 在前端開發工作中,我對 Vue 的使用較為頻繁。Vue 作為一款輕量級、易于上手且功能強大的前端框架,在眾多項目里都發揮著重要作用。 在日常的項目里,Vue 的組件化開發特性為我帶來了極大的便利。組件化能夠將頁面拆分成多個小的、可復…

深入解析Python爬蟲技術:從基礎到實戰的功能工具開發指南

一、引言:Python 爬蟲技術的核心價值 在數據驅動的時代,網絡爬蟲作為獲取公開數據的重要工具,正發揮著越來越關鍵的作用。Python 憑借其簡潔的語法、豐富的生態工具以及強大的擴展性,成為爬蟲開發的首選語言。根據 Stack Overflow 2024 年開發者調查,68% 的專業爬蟲開發者…

CSS 筆記——Flexbox(彈性盒布局)

目錄 1. Flex 容器與 Flex 項目 2. 主軸與交叉軸 3. Flex 容器的屬性 display flex-direction justify-content align-items align-content flex-wrap 4. Flex 項目的屬性 flex-grow flex-shrink flex-basis flex align-self 5. Flexbox 的優點 6. Flexbox 的…

Java學習手冊:Java反射與注解

Java反射&#xff08;Reflection&#xff09;和注解&#xff08;Annotation&#xff09;是Java語言中兩個強大的特性&#xff0c;它們在框架開發和復雜應用中扮演著重要角色。反射允許程序在運行時檢查和操作類、對象、接口、字段和方法&#xff0c;而注解則提供了一種元數據形…

JavaWeb遇到的問題匯總

問題一&#xff1a;&#xff08;鍵值對最后一項沒有逗號&#xff09; 在JSON字符串轉自定義對象和自定義對象轉JSON字符串時&#xff1a; 如圖所示&#xff1a;若忘記刪除鍵值對的最后一項沒有逗號時&#xff0c;則下一句轉換不會生效&#xff0c;應該刪除最后一項的逗號。 解…

模板引擎語法-變量

模板引擎語法-變量 文章目錄 模板引擎語法-變量&#xff08;一&#xff09;在Django框架模板中使用變量的代碼實例&#xff08;二&#xff09;在Django框架模板中使用變量對象屬性的代碼實例&#xff08;三&#xff09;在Django框架模板中使用變量顯示列表 &#xff08;一&…

AUTO-RAG: AUTONOMOUS RETRIEVAL-AUGMENTED GENERATION FOR LARGE LANGUAGE MODELS

Auto-RAG&#xff1a;用于大型語言模型的自主檢索增強生成 單位&#xff1a;中科院計算所 代碼&#xff1a; https://github.com/ictnlp/Auto-RAG 擬解決問題&#xff1a;通過手動構建規則或者few-shot prompting產生的額外推理開銷。 貢獻&#xff1a;提出一種以LLM決策為中…

Python 基礎語法匯總

Python 語法 │ ├── 基本結構 │ ├── 語句&#xff08;Statements&#xff09; │ │ ├── 表達式語句&#xff08;如賦值、算術運算&#xff09; │ │ ├── 控制流語句&#xff08;if, for, while&#xff09; │ │ ├── 定義語句&#xff08;def…

一文詳解ffmpeg環境搭建:Ubuntu系統ffmpeg配置nvidia硬件加速

在Ubuntu系統下安裝FFmpeg有多種方式,其中最常用的是通過apt-get命令和源碼編譯安裝。本文將分別介紹這兩種方式,并提供安裝過程。 一、apt-get安裝 使用apt-get命令安裝FFmpeg是最簡單快捷的方式,只需要在終端中輸入以下命令即可: # 更新軟件包列表 sudo apt-get updat…