SpringBoot常用請(qǐng)求方式及請(qǐng)求參數(shù)傳遞的方式
SpringBoot中常用的請(qǐng)求方式
@RequestMapping:不限制請(qǐng)求方式
@GetMapping:獲取數(shù)據(jù),參數(shù)拼接在url的?之后,參數(shù)名=參數(shù)值多個(gè)參數(shù)之間用&符號(hào)間隔,可緩存
@PostMapping:提交數(shù)據(jù),參數(shù)不可以直接看見(jiàn)(開(kāi)發(fā)者工具/抓包)
@PutMapping:修改數(shù)據(jù)
@DeleteMapping:刪除數(shù)據(jù)
關(guān)于請(qǐng)求參數(shù)的傳遞
方法一:@PathVariable —— 獲取“路徑參數(shù)”
- 適合場(chǎng)景:URL 路徑中有變量,比如
/user/1001 - 例子:
@GetMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {
// id 就是路徑里的 1001
return "用戶ID:" + id;
}- 路徑轉(zhuǎn)化說(shuō)明:
- 客戶端請(qǐng)求:
GET /user/1001 - 方法參數(shù):
@PathVariable Long id自動(dòng)獲得1001
- 客戶端請(qǐng)求:
方法二:@RequestParam —— 獲取“查詢參數(shù)”或“表單參數(shù)”
- 適合場(chǎng)景:URL 問(wèn)號(hào)后的參數(shù),比如
/user?name=Tom - 例子:
@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
// name 就是 URL 里的 Tom
return "用戶名:" + name;
}- 路徑轉(zhuǎn)化說(shuō)明:
- 客戶端請(qǐng)求:
GET /user?name=Tom - 方法參數(shù):
@RequestParam String name自動(dòng)獲得Tom
- 客戶端請(qǐng)求:
方法三:@RequestBody —— 獲取“請(qǐng)求體參數(shù)”(多用于 JSON)
- 適合場(chǎng)景:客戶端 POST JSON 數(shù)據(jù),如注冊(cè)用戶
- 例子:
@PostMapping("/user/add")
public String addUser(@RequestBody User user) {
// user 對(duì)象自動(dòng)映射 JSON 里的數(shù)據(jù)
return "新增用戶:" + user.getName();
}- 路徑轉(zhuǎn)化說(shuō)明:
- 客戶端請(qǐng)求:
POST /user/add,請(qǐng)求體為{"name":"Tom","age":20} - 方法參數(shù):
@RequestBody User user自動(dòng)映射
- 客戶端請(qǐng)求:
方法四:Spring Boot 的“隱式參數(shù)綁定”機(jī)制
核心知識(shí)
Spring MVC(Spring Boot 2/3 都適用)有一個(gè)自動(dòng)參數(shù)綁定機(jī)制,叫做 隱式綁定(Implicit Binding)。
- 如果你的 Controller 方法參數(shù)是簡(jiǎn)單類型(如
String、int、long),而沒(méi)有添加注解,Spring 會(huì)自動(dòng)嘗試從請(qǐng)求的參數(shù)(QueryString、Form表單)中取同名值,并賦值給方法參數(shù)。
例子說(shuō)明
前端請(qǐng)求:
POST /user/register- Content-Type:
application/x-www-form-urlencoded - 請(qǐng)求體:
username=Tom&password=123456
Controller 方法(如你圖片里的):
@PostMapping("/register")
public Result register(String username, String password) {
// Spring 會(huì)自動(dòng)把請(qǐng)求體中的 username、password 賦值過(guò)來(lái)
}詳細(xì)步驟:隱式綁定是怎么工作的?
| 步驟 | 說(shuō)明 |
|---|---|
| 1 | 前端頁(yè)面表單用 POST 提交,參數(shù)名和方法參數(shù)名一致 |
| 2 | Spring 根據(jù) Content-Type 檢查是表單提交 |
| 3 | 沒(méi)有 @RequestBody/@ModelAttribute/@RequestParam 注解時(shí), |
| Spring 會(huì)自動(dòng)把請(qǐng)求參數(shù)(key)和方法參數(shù)名匹配,賦值進(jìn)來(lái) | |
| 4 | 如果參數(shù)名不一致,則賦值失敗,值為 null |
總結(jié):只要表單的參數(shù)名和方法參數(shù)名一致,就能自動(dòng)綁定。
路徑轉(zhuǎn)化詳解
舉例說(shuō)明:
- URL:
http://localhost:8080/user/1001?name=Tom- 路徑參數(shù):
/user/1001→@PathVariable Long id - 查詢參數(shù):
?name=Tom→@RequestParam String name
- 路徑參數(shù):
- JSON 請(qǐng)求體(POST):
- URL:
/user/add - body:
{"name":"Tom","age":20}→@RequestBody User user
- URL:
常見(jiàn)場(chǎng)景和最佳實(shí)踐
| 場(chǎng)景 | 推薦方式 | 說(shuō)明 |
|---|---|---|
| 簡(jiǎn)單表單(2-3個(gè)參數(shù)) | 可以省略注解,直接用同名參數(shù) | 省事,代碼少 |
| 參數(shù)較多 | 推薦用 @ModelAttribute 封裝對(duì)象 | 代碼更整潔,可擴(kuò)展性好 |
| JSON 請(qǐng)求體 | 必須用 @RequestBody | 否則接收不到數(shù)據(jù) |
| 參數(shù)名不一致 | 必須用 @RequestParam("xxx") | 明確映射關(guān)系 |
到此這篇關(guān)于SpringBoot請(qǐng)求方式及請(qǐng)求參數(shù)傳遞的方式的文章就介紹到這了,更多相關(guān)SpringBoot請(qǐng)求傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)的簡(jiǎn)單圖片上傳功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單圖片上傳功能,結(jié)合實(shí)例形式分析了java圖片傳輸相關(guān)的檢驗(yàn)、傳輸、接收等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
SpringBoot如何接收數(shù)組參數(shù)的方法
這篇文章主要介紹了SpringBoot如何接收數(shù)組參數(shù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java枚舉類實(shí)現(xiàn)Key-Value映射的多種實(shí)現(xiàn)方式
在 Java 開(kāi)發(fā)中,枚舉(Enum)是一種特殊的類,本文將詳細(xì)介紹 Java 枚舉類實(shí)現(xiàn) key-value 映射的多種方式,有需要的小伙伴可以根據(jù)需要進(jìn)行選擇2025-04-04
Java的作業(yè)調(diào)度類庫(kù)Quartz基本使用指南
這篇文章主要介紹了Java的作業(yè)調(diào)度類庫(kù)Quartz基本使用指南,Quartz能夠讓類按照指定的計(jì)劃順序執(zhí)行,需要的朋友可以參考下2016-03-03
Spring如何實(shí)現(xiàn)輸出帶動(dòng)態(tài)標(biāo)簽的日志
文章介紹了如何通過(guò)動(dòng)態(tài)標(biāo)簽日志實(shí)現(xiàn),解決了部分業(yè)務(wù)代碼在多個(gè)模塊中調(diào)用時(shí)日志無(wú)法直觀看出來(lái)源的問(wèn)題,主要通過(guò)ThreadLocal存儲(chǔ)業(yè)務(wù)標(biāo)簽,并在日志輸出時(shí)插入該標(biāo)簽,實(shí)現(xiàn)日志的動(dòng)態(tài)標(biāo)簽功能,感興趣的朋友一起看看吧2024-12-12
mybatis模糊查詢like語(yǔ)句該如何寫(xiě)
MyBatis模糊查詢通常使用LIKE關(guān)鍵字,結(jié)合concat函數(shù)拼接通配符%實(shí)現(xiàn),在MyBatis配置文件中,通過(guò)#{keyword}傳遞參數(shù),生成帶有通配符的查詢語(yǔ)句,MyBatis-Plus中,通過(guò)LambdaQueryWrapper類和like方法構(gòu)建模糊查詢條件,簡(jiǎn)化查詢操作2024-09-09
Java數(shù)組傳遞及可變參數(shù)操作實(shí)例詳解
這篇文章主要介紹了Java數(shù)組傳遞及可變參數(shù)操作,結(jié)合實(shí)例形式詳細(xì)分析了java數(shù)組參數(shù)傳遞與可變參數(shù)相關(guān)使用技巧,需要的朋友可以參考下2019-09-09
Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算最大下標(biāo)距離算法,涉及java針對(duì)數(shù)組的遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Spring Security 自定義資源服務(wù)器實(shí)踐過(guò)程
這篇文章主要介紹了Spring Security 自定義資源服務(wù)器實(shí)踐,我們通過(guò)自己搭建的授權(quán)服務(wù)器和資源服務(wù)器,完整體驗(yàn)了OAuth2流程,需要的朋友可以參考下2022-08-08

