關于Spring MVC中@RequestParam注解的詳細說明,用于在前后端參數名稱不一致時實現參數映射。包含代碼示例和總結表格

以下是關于Spring MVC中@RequestParam注解的詳細說明,用于在前后端參數名稱不一致時實現參數映射。包含代碼示例和總結表格:


1. 核心作用

@RequestParam用于顯式綁定HTTP請求參數到方法參數,支持以下場景:

  • 參數名不一致:將前端參數名映射到后端方法參數名。
  • 可選參數:指定參數是否必須。
  • 默認值:當參數缺失時提供默認值。
  • 類型轉換:自動將請求字符串轉換為指定類型。

2. 核心屬性

屬性描述示例
value請求參數的名稱(必填或與name等效)@RequestParam("username") String name
name請求參數的名稱(與value等效)@RequestParam(name = "ageStr") Integer age
required是否必須(默認true):若為false,參數缺失時返回null(包裝類型)或默認值@RequestParam(required = false) String email
defaultValue參數缺失時的默認值(需與類型兼容)@RequestParam(defaultValue = "0") int age

3. 代碼示例

3.1 基礎用法:參數名不一致
@RestController
public class UserController {// 前端參數名為"username",后端方法參數名為"name"@GetMapping("/user")public String getUser(@RequestParam("username") String name) {return "User name: " + name;}
}
3.2 可選參數與默認值
// 前端參數"age"可選,默認值為"18"
@GetMapping("/user/age")
public String getUserAge(@RequestParam(name = "age", required = false, defaultValue = "18") int age) {return "User age: " + age;
}
3.3 多參數綁定
// 綁定多個參數,部分參數使用默認值
@GetMapping("/user/details")
public String getUserDetails(@RequestParam("name") String username, @RequestParam(required = false, defaultValue = "N/A") String email,@RequestParam(defaultValue = "0") int score
) {return String.format("Name: %s, Email: %s, Score: %d", username, email, score);
}
3.4 類型轉換
// 將字符串參數轉換為Date類型(需配置日期轉換器)
@GetMapping("/user/birthday")
public String getBirthday(@RequestParam("birthday") @DateTimeFormat(pattern = "yyyy-MM-dd") Date birth) {return "Birthdate: " + birth;
}

4. 關鍵點說明

  1. 參數名映射

    • 當前端參數名(如frontendName)與后端參數名(如backendName)不一致時,通過valuename指定前端參數名:
      @RequestParam("frontendName") String backendName
      
  2. 可選參數與默認值

    • required = false:參數缺失時:
      • 包裝類型(如StringInteger)返回null
      • 基本類型(如int)需通過defaultValue指定默認值,否則拋出異常。
  3. 類型轉換

    • Spring自動處理基本類型(如String→int)。
    • 復雜類型(如Date)需配置轉換器(如@DateTimeFormat)或自定義Converter
  4. 路徑變量與查詢參數

    • 路徑變量必須使用@PathVariable注解,不能用@RequestParam
    • 查詢參數(如?key=value)需通過@RequestParam綁定。

5. 常見錯誤與解決

錯誤場景原因解決方案
參數缺失且required = true請求未提供必需參數檢查請求參數或設置required = falsedefaultValue
類型轉換失敗(如字符串轉整數)參數值不符合目標類型(如age=abc驗證參數格式或添加@RequestParamdefaultValue
參數名不匹配(未使用value/name后端參數名與前端參數名不一致使用@RequestParam("frontendName")顯式指定前端參數名。

6. 總結表格

場景@RequestParam配置示例說明
參數名不一致@RequestParam("frontendName") backendParam@RequestParam("username") String name映射前端參數名到后端參數名。
可選參數@RequestParam(required = false)@RequestParam(required = false) String email參數缺失時返回null(包裝類型)或拋出異常(基本類型)。
默認值@RequestParam(defaultValue = "defaultValue")@RequestParam(defaultValue = "0") int score參數缺失時使用默認值。
類型轉換結合@DateTimeFormat或自定義轉換器@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date birth自動將字符串轉換為指定類型。
必填參數+默認值@RequestParam(required = true, defaultValue = "...")@RequestParam(required = true, defaultValue = "admin") String role雖然required = true,但defaultValue可提供默認值(需注意邏輯)。

7. 完整代碼示例

UserController.java
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;import java.util.Date;@RestController
public class UserController {// 場景1:參數名不一致@GetMapping("/user/name")public String getUserName(@RequestParam("frontendName") String backendName) {return "Mapped name: " + backendName;}// 場景2:可選參數+默認值@GetMapping("/user/age")public String getUserAge(@RequestParam(required = false, defaultValue = "18") Integer age,@RequestParam(name = "email", required = false) String email) {return String.format("Age: %d, Email: %s", age, email);}// 場景3:類型轉換@GetMapping("/user/birth")public String getUserBirth(@RequestParam("birthday") @DateTimeFormat(pattern = "yyyy-MM-dd") Date birth) {return "Birthdate: " + birth;}// 場景4:多參數綁定@GetMapping("/user/details")public String getUserDetails(@RequestParam("username") String name,@RequestParam(required = false, defaultValue = "N/A") String email,@RequestParam(defaultValue = "0") int score) {return String.format("Name: %s, Email: %s, Score: %d", name, email, score);}
}
測試請求
  1. 參數名映射

    GET /user/name?frontendName=John → 返回 "Mapped name: John"
    
  2. 可選參數+默認值

    GET /user/age → 返回 "Age: 18, Email: null"
    
  3. 類型轉換

    GET /user/birth?birthday=1990-01-01 → 返回 "Birthdate: Sat Jan 01 00:00:00 CST 1990"
    

通過@RequestParam,可以靈活地將前端參數與后端參數映射,解決命名不一致的問題,同時支持可選參數、默認值和類型轉換。

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

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

相關文章

MySQL主從復制技術詳解:原理、實現與最佳實踐

目錄 引言:MySQL主從復制的技術基礎 MySQL主從復制的實現機制 復制架構與線程模型 復制連接建立過程 數據變更與傳輸流程 MySQL不同復制方式的特點與適用場景 異步復制(Asynchronous Replication) 全同步復制(Fully Synch…

ROS Master多設備連接

Bash Shell Shell是位于用戶與操作系統內核之間的橋梁,當用戶在終端敲入命令后,這些輸入首先會進入內核中的tty子系統,TTY子系統負責捕獲并處理終端的輸入輸出流,確保數據正確無誤的在終端和系統內核之中。Shell在此過程不僅僅是…

Trae + LangGPT 生成結構化 Prompt

Trae LangGPT 生成結構化 Prompt 0. 引言1. 安裝 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 聯動4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 這個項目,主要向我們介紹了寫結構化Prompt的一些方法和示例,我們怎么直接使用這個項目,輔助我們…

《安富萊嵌入式周報》第352期:手持開源終端,基于參數陣列的定向揚聲器,炫酷ASCII播放器,PCB電阻箱,支持1Ω到500KΩ,Pebble智能手表代碼重構

周報匯總地址:嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 視頻版 https://www.bilibili.com/video/BV1DEf3YiEqE/ 《安富萊嵌入式周報》第352期:手持開源終端&#x…

python 淺拷貝copy與深拷貝deepcopy 理解

一 淺拷貝與深拷貝 1. 淺拷貝 淺拷貝只復制了對象本身(即c中的引用)。 2. 深拷貝 深拷貝創建一個新的對象,同時也會創建所有子對象的副本,因此新對象與原對象之間完全獨立。 二 代碼理解 1. 案例一 a 10 b a b 20 print…

day22 學習筆記

文章目錄 前言一、遍歷1.行遍歷2.列遍歷3.直接遍歷 二、排序三、去重四、分組 前言 通過今天的學習,我掌握了對Pandas的數據類型進行基本操作,包括遍歷,去重,排序,分組 一、遍歷 1.行遍歷 intertuples方法用于遍歷D…

SpringMVC的請求-文件上傳

文件上傳客戶端三要素 1. 表單項type“file” 2. 表單的提交方式是post 3. 表單的enctype屬性是多部分表單形式&#xff0c;及enctype“multipart/form-data” <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <he…

在Ubuntu系統如何讓MySQL服務器支持遠程連接

目錄 問題描述 解決方案 步驟一&#xff1a;檢查MySQL配置文件 ?編輯 步驟二&#xff1a;修改bind-address參數 ?編輯 步驟三&#xff1a;重啟MySQL服務 步驟四&#xff1a;驗證更改 步驟五&#xff1a;檢查防火墻設置 步驟六&#xff1a;測試遠程連接 注意事項 …

JSON工具-JSONUtil

對象轉JSON JSONUtil.toJsonStr可以將任意對象&#xff08;Bean、Map、集合等&#xff09;直接轉換為JSON字符串。 如果對象是有序的Map等對象&#xff0c;則轉換后的JSON字符串也是有序的。 //region 處理POST請求&#xff0c;將TreeMap轉換為JSON字符串返回/*** 處理POST請求…

死鎖 手撕死鎖檢測工具

目錄 引言 一.理論聯立 1.死鎖的概念和原因 2.死鎖檢測的基本思路 3.有向圖在死鎖檢測中的應用 二.代碼實現案例&#xff08;我們會介紹部分重要接口解釋&#xff09; 1.我們定義一個線性表來存線程ID和鎖ID 2.表中數據的查詢接口 3.表中數據的刪除接口 4.表中數據的添…

Java 中 SQL 注入問題剖析?

一、引言? 在當今數字化時代&#xff0c;數據是企業和組織的核心資產之一。許多應用程序都依賴于數據庫來存儲和管理數據&#xff0c;而 Java 作為一種廣泛使用的編程語言&#xff0c;常被用于開發與數據庫交互的應用程序。然而&#xff0c;SQL 注入這一安全漏洞卻如同隱藏在…

安全理念和安全產品發展史

從安全理念的發展歷史來看,技術與產品的演進始終圍繞 “威脅對抗” 與 “業務適配” 兩大核心展開。以下從七個關鍵階段解析安全技術與產品的發展脈絡,并結合最新實踐與未來趨勢提供深度洞察: 一、密碼學奠基階段(1970s 前) 安全理念:以 “信息保密” 為核心,防御手段…

【Ansible自動化運維】二、Playbook 深入探究:構建復雜自動化流程

? 在 Ansible 自動化運維體系中&#xff0c;Playbook 是極為關鍵的部分。它允許我們以一種結構化、可重復的方式定義和執行一系列復雜的任務&#xff0c;從而構建高效的自動化流程。本篇文章將深入探究 Ansible Playbook 的各個方面&#xff0c;助您掌握構建復雜自動化…

springboot項目中常用的工具類和api

在Spring Boot項目中&#xff0c;開發者通常會依賴一些工具類和API來簡化開發、提高效率。以下是一些常用的工具類及其典型應用場景&#xff0c;涵蓋 Spring 原生工具、第三方庫&#xff08;如Hutool、Guava&#xff09; 和 Java 自帶工具。 1. Spring Framework 自帶工具類 (…

23種設計模式-行為型模式-模板方法

文章目錄 簡介場景解決代碼關鍵優化點 總結 簡介 模板方法是一種行為設計模式&#xff0c;它在超類中定義了一個算法的框架&#xff0c;允許子類在不修改結構的情況下重寫算法的特定步驟。 場景 假如你正在開發一款分析文檔的數據挖掘程序。用戶需要向程序輸入各種格式&…

解決Long類型前端精度丟失和正常傳回后端問題

在 Java 后端開發中&#xff0c;可能會遇到前后端交互過程中 Long 類型精度丟失的問題。尤其是在 JavaScript 中&#xff0c;由于其 Number 類型是雙精度浮點數&#xff0c;超過 16 位的 Long 類型值就會發生精度丟失。 問題背景 假設有如下實體類&#xff1a; public class…

PowerPhotos:拯救你的Mac照片庫,告別蘋果原生應用的局限

如果你用Mac管理照片&#xff0c;大概率被蘋果原生「照片」應用折磨過——無法真正并行操作多個圖庫。每次切換圖庫都要關閉重啟&#xff0c;想合并照片得手動導出導入&#xff0c;重復文件更是無處可逃…… 直到我發現了 PowerPhotos&#xff0c;這款專為Mac設計的照片庫管理…

android 14.0 工廠模式 測試音頻的一些問題(高通)

1之前用tinycap&#xff0c;現在得用agmcap 執行----agmcap /data/test.wav -D 100 -d 101 -i CODEC_DMA-LPAIF_RXTX-TX-3 -T 3 報錯1 agmcap data/test.wav -D 100 -d 101 -i CODEC_DMA-LPAIF_RXTX-TX-3 -T 3 Failed to open xml file name /vendor/etc/backend_co…

以庫存系統為核心的ERP底層架構設計

在企業資源計劃&#xff08;ERP&#xff09;系統中&#xff0c;庫存系統常被視為基礎模塊。但在現代企業的數字化進程中&#xff0c;庫存系統不僅僅是一個模塊&#xff0c;它已經逐步演化為驅動整個ERP生態的核心引擎。本文從架構設計的角度&#xff0c;探討為何庫存系統應被置…

辛格迪客戶案例 | 北京舒曼德醫藥實施電子合約系統(eSign)

01 北京舒曼德醫藥科技開發有限公司&#xff1a;醫藥科技的數字化先鋒 北京舒曼德醫藥科技開發有限公司&#xff08;以下簡稱“舒曼德醫藥”&#xff09;作為國內醫藥科技領域的領軍企業&#xff0c;致力于創新藥物的研發、臨床試驗和市場推廣。公司以“科技興藥、質量為先、服…