Spring MVC 四種核心傳參形式對比分析
在使用 Spring MVC 編寫接口時,我們幾乎每天都在和“參數(shù)”打交道。
路徑參數(shù)、請求參數(shù)、JSON、對象接收……看起來方式很多,但如果只停留在“記注解”,很容易越學(xué)越亂。
事實(shí)上,從參數(shù)來源的角度來看,Spring MVC 中絕大多數(shù)的傳參方式都可以歸納為 四種核心形式:路徑參數(shù)、請求參數(shù)、請求體參數(shù)、對象參數(shù)
理解這四類參數(shù)的來源和適用場景,基本就掌握了 Spring MVC 80% 的參數(shù)接收機(jī)制。
一、路徑參數(shù):參數(shù)直接來自 URL 路徑
1. 什么是路徑參數(shù)
路徑參數(shù)是 URL 路徑本身的一部分,通常用于表示某個具體資源。
GET /users/1
其中的 1,就是一個典型的路徑參數(shù)。
2. 使用方式
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.getById(id);
}3. 特點(diǎn)與適用場景
- 參數(shù)嵌入在 URL 中,語義清晰
- 符合 RESTful 設(shè)計風(fēng)格
- 通常用于資源的定位
常見場景:
- 根據(jù) id 查詢詳情
- 根據(jù) id 刪除資源
二、請求參數(shù):來自 URL 或表單的 key-value 參數(shù)
1. 什么是請求參數(shù)
請求參數(shù)通常以 key=value 的形式出現(xiàn),存在于 URL 查詢串或表單數(shù)據(jù)中。
GET /users?name=zhangsan&age=18
2. 使用方式
@GetMapping("/users")
public List<User> list(
@RequestParam String name,
@RequestParam Integer age) {
return userService.list(name, age);
}3. 特點(diǎn)與適用場景
- 參數(shù)形式簡單、直觀
- 適合可選參數(shù)較多的場景
- 不具備強(qiáng)結(jié)構(gòu)性
常見場景:
- 條件查詢
- 分頁、排序參數(shù)
三、請求體參數(shù):來自 HTTP Request Body 的結(jié)構(gòu)化數(shù)據(jù)
1. 什么是請求體參數(shù)
請求體參數(shù)來源于 HTTP 請求體,通常是 JSON 格式,前后端分離項目中非常常見。
{
"name": "zhangsan",
"age": 18
}
2. 使用方式
@PostMapping("/users")
public void save(@RequestBody User user) {
userService.save(user);
}3. 特點(diǎn)與適用場景
- 數(shù)據(jù)結(jié)構(gòu)清晰、層次分明
- 通常用于 POST、PUT 請求
- 依賴 HttpMessageConverter 進(jìn)行解析
常見場景:
- 新增數(shù)據(jù)
- 更新數(shù)據(jù)
- 前后端分離接口
四、對象參數(shù):請求參數(shù)的自動封裝
1. 什么是對象參數(shù)
對象參數(shù)并不是單獨(dú)的一種數(shù)據(jù)來源,而是 Spring MVC 將請求參數(shù)自動綁定為 Java 對象的結(jié)果。
POST /users
name=zhangsan&age=18
2. 使用方式
@PostMapping("/users")
public void save(User user) {
userService.save(user);
}3. 底層原理說明
Spring 會根據(jù)以下規(guī)則進(jìn)行自動綁定:
- 請求參數(shù)名
- 對象屬性名
- 對應(yīng)的 setter 方法
只要三者匹配,就可以完成自動封裝。
這是 Spring MVC 非常“無感但強(qiáng)大”的能力。
五、一個非常容易混淆的點(diǎn)
對象參數(shù) ≠ 請求體參數(shù)
很多人容易把下面兩種寫法混為一談:
public void save(User user) // 對象參數(shù)(來自請求參數(shù)) public void save(@RequestBody User user) // 請求體參數(shù)(來自 JSON)
關(guān)鍵區(qū)別在于:
- 是否使用 @RequestBody
- 參數(shù)來自請求參數(shù),還是請求體
這一點(diǎn)在實(shí)際開發(fā)中非常重要。
六、四種傳參形式對比總結(jié)
| 類型 | 參數(shù)來源 | 典型注解 | 常見場景 |
|---|---|---|---|
| 路徑參數(shù) | URL 路徑 | @PathVariable | 資源定位 |
| 請求參數(shù) | URL / 表單 | @RequestParam | 條件查詢 |
| 請求體參數(shù) | Request Body | @RequestBody | JSON 提交 |
| 對象參數(shù) | 請求參數(shù)封裝 | 無 / @ModelAttribute | 表單提交 |
七、總結(jié)
Spring MVC 的傳參,本質(zhì)是根據(jù)“參數(shù)來源不同”,選擇不同的解析與綁定方式。
到此這篇關(guān)于Spring MVC 四種核心傳參形式對比分析的文章就介紹到這了,更多相關(guān)Spring MVC傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 中 RestTemplate 的核心用法指南
本文詳細(xì)介紹了RestTemplate的使用,包括基礎(chǔ)用法、進(jìn)階配置技巧、實(shí)戰(zhàn)案例以及最佳實(shí)踐建議,通過一個騰訊地圖路線規(guī)劃的案例,展示了如何在實(shí)際項目中應(yīng)用RestTemplate進(jìn)行服務(wù)間通信,感興趣的朋友跟隨小編一起看看吧2025-12-12
Ubuntu安裝JDK與IntelliJ?IDEA的詳細(xì)過程
APT是Linux系統(tǒng)上的包管理工具,能自動解決軟件包依賴關(guān)系并從遠(yuǎn)程存儲庫中獲取安裝軟件包,這篇文章主要介紹了Ubuntu安裝JDK與IntelliJ?IDEA的過程,需要的朋友可以參考下2023-08-08
詳解Java如何優(yōu)雅的實(shí)現(xiàn)異常捕獲
在一個優(yōu)秀的項目中一定少不了對程序流程良好的異常捕獲與日志打印,所以本文主要為大家介紹了如何優(yōu)雅的實(shí)現(xiàn)異常捕獲與日志打印輸出,有需要的可以參考下2023-09-09
Spring?AI?Alibaba框架構(gòu)建智能體Agent的完整指南
隨著大語言模型(LLM)技術(shù)的快速發(fā)展,構(gòu)建智能Agent應(yīng)用變得越來越簡單,本文將通過兩個實(shí)際的代碼示例,展示如何使用Spring?AI?Alibaba框架構(gòu)建功能豐富的天氣查詢Agent,感興趣的小伙伴可以了解下2026-03-03
Java ArrayList與LinkedList使用方法詳解
Java中容器對象主要用來存儲其他對象,根據(jù)實(shí)現(xiàn)原理不同,主要有3類常用的容器對象:ArrayList使用數(shù)組結(jié)構(gòu)存儲容器中的元素、LinkedList使用鏈表結(jié)構(gòu)存儲容器中的元素2022-11-11
Java 重命名 Excel 工作表并設(shè)置工作表標(biāo)簽顏色的示例代碼
這篇文章主要介紹了Java 重命名 Excel 工作表并設(shè)置工作表標(biāo)簽顏色的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
Spring Boot整合Spring Security簡單實(shí)現(xiàn)登入登出從零搭建教程
這篇文章主要給大家介紹了關(guān)于Spring Boot整合Spring Security簡單實(shí)現(xiàn)登入登出從零搭建的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-09-09
java中靜態(tài)變量和實(shí)例變量的區(qū)別詳細(xì)介紹
本篇文章介紹了,java中靜態(tài)變量和實(shí)例變量的區(qū)別。需要的朋友參考下2013-05-05

