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ù)不可以直接看見(開發(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)化說明:
- 客戶端請(qǐng)求:
GET /user/1001 - 方法參數(shù):
@PathVariable Long id自動(dòng)獲得1001
- 客戶端請(qǐng)求:
方法二:@RequestParam —— 獲取“查詢參數(shù)”或“表單參數(shù)”
- 適合場(chǎng)景:URL 問號(hào)后的參數(shù),比如
/user?name=Tom - 例子:
@GetMapping("/user")
public String getUserByName(@RequestParam String name) {
// name 就是 URL 里的 Tom
return "用戶名:" + name;
}- 路徑轉(zhuǎn)化說明:
- 客戶端請(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)化說明:
- 客戶端請(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),而沒有添加注解,Spring 會(huì)自動(dòng)嘗試從請(qǐng)求的參數(shù)(QueryString、Form表單)中取同名值,并賦值給方法參數(shù)。
例子說明
前端請(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 賦值過來
}詳細(xì)步驟:隱式綁定是怎么工作的?
| 步驟 | 說明 |
|---|---|
| 1 | 前端頁面表單用 POST 提交,參數(shù)名和方法參數(shù)名一致 |
| 2 | Spring 根據(jù) Content-Type 檢查是表單提交 |
| 3 | 沒有 @RequestBody/@ModelAttribute/@RequestParam 注解時(shí), |
| Spring 會(huì)自動(dòng)把請(qǐng)求參數(shù)(key)和方法參數(shù)名匹配,賦值進(jìn)來 | |
| 4 | 如果參數(shù)名不一致,則賦值失敗,值為 null |
總結(jié):只要表單的參數(shù)名和方法參數(shù)名一致,就能自動(dòng)綁定。
路徑轉(zhuǎn)化詳解
舉例說明:
- 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:
常見場(chǎng)景和最佳實(shí)踐
| 場(chǎng)景 | 推薦方式 | 說明 |
|---|---|---|
| 簡(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 Lambda表達(dá)式與匿名內(nèi)部類的聯(lián)系和區(qū)別實(shí)例分析
這篇文章主要介紹了Java Lambda表達(dá)式與匿名內(nèi)部類的聯(lián)系和區(qū)別,結(jié)合實(shí)例形式分析了Java Lambda表達(dá)式與匿名內(nèi)部類功能、用法、區(qū)別及操作注意事項(xiàng),需要的朋友可以參考下2019-10-10
spring boot啟動(dòng)加載數(shù)據(jù)原理分析
實(shí)際應(yīng)用中,我們會(huì)有在項(xiàng)目服務(wù)啟動(dòng)的時(shí)候就去加載一些數(shù)據(jù)或做一些事情這樣的需求。這時(shí)spring Boot 為我們提供了一個(gè)方法,通過實(shí)現(xiàn)接口 CommandLineRunner 來實(shí)現(xiàn)。下面給大家詳細(xì)介紹下,需要的的朋友參考下吧2017-04-04
淺談Java設(shè)計(jì)模式之原型模式知識(shí)總結(jié)
Java原型模式主要用于創(chuàng)建重復(fù)的對(duì)象,同時(shí)又能保證性能,這篇文章就帶大家仔細(xì)了解一下原型模式的知識(shí),對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之二叉樹
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之二叉樹,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題及解決方案
windows系統(tǒng)打開README.md文件,每次都需要右鍵選擇notepad打開,感覺很麻煩,然后就把README.md文件打開方式默認(rèn)選擇了notepad,這樣每次雙擊就能打開,感覺很方便,這篇文章主要介紹了MyEclipse打開文件跳轉(zhuǎn)到notepad打開問題,需要的朋友可以參考下2024-03-03
java web實(shí)現(xiàn)自動(dòng)登錄
這篇文章主要為大家詳細(xì)介紹了java web實(shí)現(xiàn)自動(dòng)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

