SpringBoot請求參數(shù)接收控制指南分享
Spring Boot 請求參數(shù)接收控制指南
1. 概述
在Spring Boot項(xiàng)目中,我們可以通過不同的注解來接收來自HTTP請求的各種參數(shù)。
本指南將詳細(xì)介紹各種參數(shù)接收方式及其使用場景。
2. 有注解時(shí)參數(shù)接收方式對比
| 參數(shù)類型 | 注解 | 位置 | 適用HTTP方法 | 示例 |
|---|---|---|---|---|
| 路徑參數(shù) | @PathVariable | URL路徑中 | GET, DELETE | /users/{id} |
| 查詢參數(shù) | @RequestParam | URL?后 | GET | /users?name=John |
| 請求體 | @RequestBody | 請求體 | POST, PUT, PATCH | JSON/XML數(shù)據(jù) |
| 請求頭 | @RequestHeader | HTTP頭 | 任意 | Authorization: Bearer token |
| Cookie值 | @CookieValue | Cookie頭 | 任意 | Cookie: JSESSIONID=xxx |
| 表單數(shù)據(jù) | @RequestParam | 表單體 | POST | application/x-www-form-urlencoded |
| 文件上傳 | @RequestParam | multipart/form-data | POST | 文件上傳表單 |
3. 無注解時(shí)接收參數(shù)默認(rèn)位置
Spring Boot 默認(rèn)參數(shù)綁定規(guī)則(不加注解時(shí))
| 請求類型 | 參數(shù)類型 | 默認(rèn)綁定位置 | 示例 | 注意事項(xiàng) |
|---|---|---|---|---|
| GET | 基本類型/String | 自動綁定到URL查詢參數(shù) | GET /user?name=Tom → public String getUser(String name) | 參數(shù)名必須與URL中的key一致 |
| POJO對象 | 自動綁定到URL查詢參數(shù) | GET /user?name=Tom&age=20 → public String getUser(User user) | 對象的字段名需與URL參數(shù)匹配 | |
| 數(shù)組/集合 | 自動綁定到URL查詢參數(shù) | GET /user?ids=1,2,3 → public String getUser(List<Integer> ids) | 支持逗號分隔或同名參數(shù)(ids=1&ids=2) | |
| POST | 基本類型/String | 表單數(shù)據(jù) (Form Data) | POST /user (Content-Type: application/x-www-form-urlencoded) | 需設(shè)置Content-Type為表單類型 |
| POJO對象 | 表單數(shù)據(jù)或JSON請求體 | 若為application/json → 綁定到請求體;若為表單 → 按字段名匹配 | 需明確指定Content-Type,否則可能解析失敗 | |
| 數(shù)組/集合 | 表單數(shù)據(jù)或JSON請求體 | 同POJO規(guī)則 | 表單格式需用同名參數(shù)(names=Tom&names=Jerry) | |
| MultipartFile | 文件上傳 (multipart) | POST /upload (enctype="multipart/form-data") | 必須設(shè)置enctype="multipart/form-data" | |
| PUT/PATCH | 所有類型 | JSON/XML請求體 | PUT /user { "name": "Tom" } → public String updateUser(User user) | 默認(rèn)按@RequestBody處理,需顯式加注解才能覆蓋 |
| DELETE | 基本類型/String | URL查詢參數(shù) | DELETE /user?id=123 → public String deleteUser(Long id) | 與GET相同 |
| POJO對象 | 不支持 | - | DELETE通常只用路徑參數(shù)或簡單查詢參數(shù) |
關(guān)鍵規(guī)則總結(jié)
GET/DELETE 請求:
- 參數(shù)默認(rèn)綁定到 URL查詢字符串(
?key=value)。 - POJO對象會按字段名自動拆解到查詢參數(shù)。
POST 請求:
- 默認(rèn)按 表單數(shù)據(jù)(
application/x-www-form-urlencoded)解析。 - 若請求頭為
Content-Type: application/json,則需顯式加@RequestBody,否則綁定失敗。
PUT/PATCH 請求:
- 默認(rèn)按請求體(JSON/XML)處理,類似
@RequestBody行為,但實(shí)際開發(fā)中建議顯式加注解。
特殊類型:
MultipartFile:僅在multipart/form-data類型的POST中自動綁定。- 數(shù)組/集合:支持URL查詢參數(shù)(GET)或表單同名參數(shù)(POST)。
常見誤區(qū)澄清
表單數(shù)據(jù)不會放在請求頭
- 請求頭僅用于元數(shù)據(jù)(如
Content-Type、Authorization等),表單內(nèi)容一定在請求體。
GET請求能否帶表單數(shù)據(jù)?
- ? 不能。GET請求的參數(shù)只能通過URL查詢字符串(
?key=value)傳遞,且長度受限。
不加注解時(shí)Spring Boot如何綁定表單數(shù)據(jù)?
- 默認(rèn)按參數(shù)名匹配請求體中的表單字段(需參數(shù)名與表單字段名一致)。
POST JSON vs 表單數(shù)據(jù)
- JSON數(shù)據(jù)必須顯式使用
@RequestBody,而表單數(shù)據(jù)默認(rèn)綁定(無需注解)。
4.HTTP請求參數(shù)位置自定義控制對照表
| 參數(shù)位置 | Spring Boot注解 | 手動提取方式 | 適用場景 | 示例請求 |
|---|---|---|---|---|
| URL路徑參數(shù) | @PathVariable | HttpServletRequest.getRequestURI() | RESTful資源標(biāo)識 | GET /users/123 → id=123 |
| URL查詢參數(shù) | @RequestParam | request.getParameter("name") | 過濾條件、分頁 | GET /users?name=Tom → name=Tom |
| 請求頭 | @RequestHeader | request.getHeader("Authorization") | 認(rèn)證令牌、客戶端信息 | Header: Authorization: Bearer xxx |
| 請求體(JSON) | @RequestBody | InputStream + JSON解析庫 | 復(fù)雜數(shù)據(jù)提交 | POST /users + {"name":"Tom"} |
| 請求體(表單) | @RequestParam | request.getParameterMap() | 傳統(tǒng)表單提交 | POST /login + username=Tom&password=123 |
| 請求體(文件) | @RequestPart | MultipartHttpServletRequest | 文件上傳 | POST /upload + multipart/form-data |
| Cookie | @CookieValue | request.getCookies() | 會話管理 | Cookie: sessionId=abc123 |
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決Could not transfer artifact org.spri
在Maven更新過程中遇到“Could not transfer artifact org.springframework.boot”錯(cuò)誤通常是由于網(wǎng)絡(luò)問題,解決方法是在Maven的設(shè)置中忽略HTTPS,添加特定語句后,可以正常下載依賴,但下載速度可能較慢,這是一種常見的解決方案,希望對遇到相同問題的人有所幫助2024-09-09
SpringBoot之Java配置的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot之Java配置的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
Springboot logback-spring.xml無法加載問題
這篇文章主要介紹了Springboot logback-spring.xml無法加載問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
druid執(zhí)行SQL出現(xiàn)錯(cuò)誤但不影響返回結(jié)果的問題及解決
這篇文章主要介紹了druid執(zhí)行SQL出現(xiàn)錯(cuò)誤但不影響返回結(jié)果的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Springboot如何集成jodconverter做文檔轉(zhuǎn)換
這篇文章主要介紹了Springboot如何集成jodconverter做文檔轉(zhuǎn)換問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Spring Data JPA使用Sort進(jìn)行排序(Using Sort)
本篇文章主要介紹了Spring Data JPA使用Sort進(jìn)行排序(Using Sort),具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07

