Spring MVC @RequestParam注解全解析

@RequestParam 注解詳解

@RequestParam 是 Spring MVC 中最常用的注解之一,用于從 HTTP 請求中提取查詢參數(Query String)或表單數據。它主要處理 application/x-www-form-urlencoded 類型的請求(如 GET 請求或 POST 表單提交)。


一、核心作用
  1. 參數綁定
    將請求中的參數值綁定到控制器方法的參數上。

    // 示例:獲取請求中的 `name` 參數
    @GetMapping("/user")
    public String getUser(@RequestParam String name) {return "User: " + name;
    }
    
    • 訪問 /user?name=Alice → 輸出 User: Alice
  2. 處理可選參數
    通過 required 屬性控制參數是否必須。

    @GetMapping("/search")
    public String search(@RequestParam(required = false) String keyword) {return keyword != null ? "Results for: " + keyword : "All items";
    }
    
    • 訪問 /search → 輸出 All items
    • 訪問 /search?keyword=spring → 輸出 Results for: spring

二、關鍵屬性
屬性說明默認值
value / name指定請求參數的名稱方法參數名
required參數是否必須true (必須)
defaultValue參數缺失時的默認值
示例:
@PostMapping("/register")
public String register(@RequestParam("username") String user,  // 綁定到"username"參數@RequestParam(name = "age", defaultValue = "18") int age, // 缺省時默認為18@RequestParam(required = false) String hobby // 可選參數
) {// 業務邏輯
}

三、使用場景
  1. 獲取單個參數

    @GetMapping("/detail")
    public String detail(@RequestParam Long id) { ... }
    
  2. 獲取多個同名參數(如復選框)

    @PostMapping("/submit")
    public String submit(@RequestParam List<String> interests) {// interests 接收如 ?interests=music&interests=sports 的值
    }
    
  3. 映射到 Map 對象

    @GetMapping("/filters")
    public String applyFilters(@RequestParam Map<String, String> filters) {// 接收所有參數,如 ?category=books&price=100
    }
    

四、注意事項
  1. 參數名匹配規則

    • 默認根據方法參數名匹配請求參數(需編譯時開啟 -parameters 或顯式指定 @RequestParam("param"))。
    • 若參數名未指定且編譯未保留參數名,會拋出 MissingServletRequestParameterException
  2. 類型轉換
    Spring 自動將 String 類型的參數轉為目標類型(如 int, LocalDate 等)。

    • 轉換失敗 → 拋出 TypeMismatchException
  3. @PathVariable 區別

    特性@RequestParam@PathVariable
    來源查詢字符串(?key=valueURL 路徑(/users/{id}
    是否可選可通過 required=false 設為可選通常是必須的
    示例/api?page=1/api/users/123
  4. @RequestBody 區別

    • @RequestParam:處理 URL 編碼數據(簡單鍵值對)。
    • @RequestBody:處理 JSON/XML 等復雜數據(如 POST 請求體)。

五、常見問題解決方案
  1. 參數缺失異常

    // 方案1: 設置 required=false
    @RequestParam(required = false) String param// 方案2: 提供默認值
    @RequestParam(defaultValue = "default") String param
    
  2. 參數名沖突
    顯式指定參數名避免歧義:

    public String query(@RequestParam("from") Date startDate,  // 使用"from"作為參數名@RequestParam("to") Date endDate
    ) { ... }
    
  3. 接收數組/列表

    // 前端傳參: ?ids=1,2,3 或 ?ids=1&ids=2
    public String getItems(@RequestParam List<Long> ids) { ... }
    

六、最佳實踐
  1. 簡單查詢:優先用 @RequestParam 處理過濾條件(如分頁、排序)。
  2. RESTful 路徑:資源標識用 @PathVariable(如 /users/{id}),附加參數用 @RequestParam(如 /users?role=admin)。
  3. 明確命名:避免依賴編譯參數名,顯式聲明 @RequestParam("paramName")
  4. 設置默認值:對分頁參數等推薦使用 defaultValue
    @GetMapping("/posts")
    public Page<Post> getPosts(@RequestParam(defaultValue = "0") int page,@RequestParam(defaultValue = "10") int size
    ) { ... }
    

總結@RequestParam 是 Spring 中處理請求參數的基石級注解,適用于大多數簡單數據綁定場景。掌握其用法能高效處理 URL 編碼數據,但復雜 JSON 數據應使用 @RequestBody

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

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

相關文章

從零掌握XML與DTD實體:原理、XXE漏洞攻防

本文僅用于技術研究&#xff0c;禁止用于非法用途。 Author:枷鎖 文章目錄一、XML基礎1. 什么是XML&#xff1f;2. XML語法規則3. 數據類型二、DTD1. 認識DTD2. 聲明DTD3. DTD實體4. 如何防御XXE攻擊&#xff1f;5. 總結一、XML基礎 1. 什么是XML&#xff1f; XML &#xff1…

.NET 8 Release Candidate 1 (RC1)現已發布,包括許多針對ASP.NET Core的重要改進!

.NET 8 Release Candidate 1 (RC1)發布&#xff1a;ASP.NET Core重大改進來襲&#xff01; 近日&#xff0c;.NET 8 Release Candidate 1 (RC1)正式發布&#xff0c;這是在今年晚些時候計劃發布的最終 .NET 8 版本之前的兩個候選版本中的第一個。此版本包含了大部分計劃中的功…

Jenkins pipeline 部署docker通用模板

Jenkinsfile: Docker的NETWORK_NAME不要使用bridge默認網絡&#xff0c;要使用自定義的網絡如test默認 bridge 網絡&#xff1a;容器間不能用名字互相訪問&#xff0c;只能用 IP。自定義網絡&#xff1a;容器間可以用名字互相訪問&#xff0c;Docker 自動做了 DNS 解析。pipeli…

【每日算法】專題十五_BFS 解決 FloodFill 算法

1. 算法思想 Flood Fill 問題的核心需求 給定一個二維網格&#xff08;如像素矩陣&#xff09;、一個起始坐標 (x, y) 和目標顏色 newColor&#xff0c;要求&#xff1a; 將起始點 (x, y) 的顏色替換為 newColor。遞歸地將所有與起始點相鄰&#xff08;上下左右&#xff09; …

ESLint 完整功能介紹和完整使用示例演示

以下是ESLint的完整功能介紹和完整使用示例演示&#xff1a; ESLint 完整功能介紹 一、核心功能靜態代碼分析&#xff1a; 通過解析JavaScript/TypeScript代碼為抽象語法樹&#xff08;AST&#xff09;&#xff0c;識別語法錯誤、潛在問題&#xff08;如未定義變量、未使用變量…

解決問題七大步驟

發現問題后尋找解決方案的流程可以細化為 7個核心步驟&#xff0c;每個步驟包含具體措施、信息源和關鍵技巧&#xff0c;形成“從自查到驗證、從獨立解決到尋求幫助”的完整閉環。以下是完善后的流程&#xff1a; 一、明確問題與初步自查&#xff08;前提&#xff1a;減少無效搜…

思維鏈(CoT)技術全景:原理、實現與前沿應用深度解析

一、核心概念與原理 定義與起源 CoT 是一種引導大語言模型&#xff08;LLM&#xff09;顯式生成中間推理步驟的技術&#xff0c;通過模擬人類逐步解決問題的過程&#xff0c;提升復雜任務&#xff08;如數學證明、多步邏輯推理&#xff09;的準確性。該概念由 Google Brain 團…

實驗-華為綜合

華為綜合實驗 一 實驗拓撲二 實驗配置交換機2 vlan batch 10 20 int e0/0/2 port link-type access port default vlan 10 int e0/0/1 port link-type access port default vlan 20 int e0/0/3 port link-type trunk port trunk allow-pass vlan alltelnet交換機3 鏈路類型配置…

Matlab打開慢、加載慢的解決辦法

安裝完畢后直接打開會非常慢&#xff0c;而且打開了之后還得加載很久才能運行 解決辦法如下&#xff1a; 1.找到路徑“D:\Program Files\Polyspace\R2020a\licenses”&#xff08;我是把matlab安裝在D盤了&#xff0c;如果是其他盤修改路徑即可&#xff09;&#xff0c;該路徑記…

混沌趨勢指標原理及交易展示

1. 引言在金融市場交易中&#xff0c;尤其是加密貨幣合約交易&#xff0c;趨勢跟蹤是最主流的策略之一。然而&#xff0c;傳統趨勢指標如均線、MACD等存在明顯的滯后性&#xff0c;往往在趨勢確立后才發出信號&#xff0c;導致交易者錯失最佳入場時機。更糟糕的是&#xff0c;市…

Java面試寶典:Maven

一、Maven的本質與核心價值 項目管理革命 POM驅動:通過pom.xml文件定義項目結構、依賴、構建規則,實現標準化管理()。示例配置: <dependencies> <dependency> <groupId>org.springframework

可靠消息最終一致性分布式事務解決方案

之前文章寫過主流的一些 分布式事務的解決方案&#xff0c;但其實工作中很少有一些高并發的業務中去使用這些方案&#xff0c;因為對于高并發的場景來說&#xff0c;引入這些方案的性能損耗太大&#xff0c;且對系統事務侵入性太強影響系統穩定性。 所以在高并發的業務中&…

ISIS基礎

拓撲計算方式 模型 支持的網絡 支持的地址OSPF SPF TCP/IP IP網絡 IPv4地址ISIS SPF OSI CLNP網絡 NSAP地址集成ISIS SPF TCP/IP IP網絡 NSAP地址&#xff0c;但可以支持IPv4地址12. …

基于ASP.NET+SQL Server實現(Web)排球賽事網站

排球賽事網的設計與實現摘要隨著近幾年來計算機技術、網絡技術及相應軟件技術的迅猛發展&#xff0c;人們的生活已越來越離不開計算機了&#xff0c;而且總是要花費很多時間在它上面。一直以來&#xff0c;排球作為一項大眾喜愛的運動&#xff0c;得到廣泛傳播。隨著各項排球賽…

【PTA數據結構 | C語言版】根據后序和中序遍歷輸出前序遍歷

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 本題要求根據給定的一棵二叉樹的后序遍歷和中序遍歷結果&#xff0c;輸出該樹的前序遍歷結果。 輸入格式: 第一行給出正整數 n (≤30)&#xff0c;是樹中結點的個數。隨后兩行&#xff0c;每行給出…

Java HashMap高頻面試題深度解析

在 Java 面試中&#xff0c;HashMap 是必問的核心知識點&#xff0c;以下是高頻問題和深度解析框架&#xff0c;助你系統性掌握&#xff1a;一、基礎概念HashMap 的本質是什么&#xff1f; 基于哈希表的 Map 接口實現&#xff0c;存儲鍵值對&#xff08;Key-Value&#xff09;非…

GitHub Pages無法訪問以點號.開頭的目錄

目錄 前言 Jekyll 是什么 啟用訪問 總結 前言 一些前端項目經常會使用GitHub Pages進行部署展示&#xff0c;但是GitHub Pages 使用的是 Jekyll 引擎&#xff0c;對 Jekyll 引擎不熟悉的小伙伴就會出現如文章標題所言的情況。 Jekyll 是什么 Jekyll 是 GitHub Pages 默認…

JS JSON.stringify介紹(JS序列化、JSON字符串 )(遍歷輸入值的所有可枚舉屬性,將其轉換為文本表示)緩存序列化、狀態管理與時間旅行、replacer

文章目錄JSON.stringify 全解析1. 基本概念2. 序列化原理1. 對于原始類型&#xff0c;直接轉換為對應的字符串表示2. 對于對象和數組&#xff0c;遞歸處理其每個屬性或元素3. 應用特殊規則處理日期、函數、Symbol 等特殊類型4. 檢測并防止循環引用5. 應用 replacer 函數或數組進…

SQLite / LiteDB 單文件數據庫為何“清空表后仍占幾 GB”?——原理解析與空間回收實戰

關鍵詞&#xff1a; SQLite、LiteDB、VACUUM、WAL、auto_vacuum、文件瘦身、數據庫維護在嵌入式或桌面、IoT 網關等場景&#xff0c;很多同學都會選擇單文件數據庫&#xff08;SQLite、LiteDB、SQL CE…&#xff09;。 最近群里一位朋友反饋&#xff1a;“我的 test.db 已經把業…

如何加固Web服務器的安全?

Web服務器是用戶和公司聯系的橋梁&#xff0c;Web服務器為用戶交付網頁內容和提供Web應用。正因為Web服務器是面向互聯網的&#xff0c;所以成為了網絡的攻擊經常利用的一個入口。Web 服務器是企業數字化轉型的 “前沿陣地”&#xff0c;其安全性不僅關乎技術層面的穩定運行&am…