SpringBoot?中處理接口傳參時(shí)常用的注解及使用場景分析
SpringBoot 接收前端參數(shù)的核心注解都基于 Spring MVC,主要解決不同位置參數(shù)(URL 路徑、請求頭、請求體、URL 參數(shù)等)的綁定問題,下面按使用場景分類說明:
1. 路徑參數(shù)(URL 中 /{xxx} 形式):@PathVariable
- 核心作用:綁定 URL 路徑中的動態(tài)參數(shù)(如
/user/123中的123)到方法參數(shù)。 - 使用場景:RESTful 風(fēng)格接口,獲取資源 ID、分類標(biāo)識等。
- 核心用法:
@RestController
@RequestMapping("/user")
public class UserController {
// 訪問路徑:/user/123
@GetMapping("/{id}")
public String getUserById(@PathVariable Long id) {
return "獲取到用戶ID:" + id;
}
// 多路徑參數(shù) + 指定參數(shù)名(參數(shù)名與路徑變量名不一致時(shí))
@GetMapping("/{id}/order/{orderId}")
public String getUserOrder(
@PathVariable("id") Long userId,
@PathVariable("orderId") Long orderId
) {
return "用戶ID:" + userId + ",訂單ID:" + orderId;
}
}- 關(guān)鍵說明:默認(rèn)要求路徑變量名與方法參數(shù)名一致,不一致時(shí)需用
@PathVariable("xxx")指定。
2. URL 請求參數(shù)(?key=value 形式):@RequestParam
- 核心作用:綁定 URL 中
?后的查詢參數(shù)(如/user?name=張三)到方法參數(shù)。 - 使用場景:分頁、篩選、簡單條件查詢(如
page=1&size=10)。 - 核心用法:
@RestController
@RequestMapping("/user")
public class UserController {
// 訪問路徑:/user/list?name=張三&age=20
@GetMapping("/list")
public String getUserList(
@RequestParam String name, // 必傳參數(shù)
@RequestParam(required = false, defaultValue = "18") Integer age // 非必傳+默認(rèn)值
) {
return "姓名:" + name + ",年齡:" + age;
}
}- 關(guān)鍵屬性:
required:是否必傳,默認(rèn)true(不傳會報(bào)錯(cuò));defaultValue:參數(shù)未傳時(shí)的默認(rèn)值(僅required=false時(shí)生效);value:指定 URL 參數(shù)名(與方法參數(shù)名不一致時(shí)用)。
3. 請求體參數(shù)(JSON/XML):@RequestBody
- 核心作用:綁定 HTTP 請求體(通常是 JSON 格式)到 Java 對象(POJO)。
- 使用場景:POST/PUT 請求,傳遞復(fù)雜數(shù)據(jù)(如新增 / 修改用戶信息)。
- 核心用法:
// 1. 定義POJO(接收前端JSON)
public class UserDTO {
private String name;
private Integer age;
// 省略getter/setter
}
// 2. 控制器接收參數(shù)
@RestController
@RequestMapping("/user")
public class UserController {
// 前端POST請求體:{"name":"張三","age":20}
@PostMapping("/add")
public String addUser(@RequestBody UserDTO userDTO) {
return "新增用戶:" + userDTO.getName() + ",年齡:" + userDTO.getAge();
}
}- 關(guān)鍵說明:
- 僅支持 POST/PUT 等有請求體的請求(GET 請求無請求體,用會報(bào)錯(cuò));
- 前端需保證 Content-Type 為
application/json,否則解析失?。?/li> - 可搭配
@Valid/@Validated做參數(shù)校驗(yàn)(如@NotBlank(message = "姓名不能為空"))。
4. 請求頭參數(shù):@RequestHeader
- 核心作用:綁定 HTTP 請求頭中的參數(shù)(如 Token、Content-Type)。
- 使用場景:獲取令牌(Token)、語言標(biāo)識(Accept-Language)等。
- 核心用法:
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/info")
public String getUserInfo(
@RequestHeader("token") String token, // 獲取token請求頭
@RequestHeader(value = "Accept-Language", required = false) String lang // 非必傳
) {
return "Token:" + token + ",語言:" + (lang == null ? "zh-CN" : lang);
}
}
5. Cookie 參數(shù):@CookieValue
- 核心作用:綁定 HTTP Cookie 中的參數(shù)。
- 使用場景:獲取前端存儲的 Cookie(如用戶登錄態(tài))。
- 核心用法:
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/cookie")
public String getCookie(@CookieValue("JSESSIONID") String sessionId) {
return "SessionID:" + sessionId;
}
}
6. 無注解(自動綁定)
- 核心作用:當(dāng)參數(shù)是簡單類型(String、Integer、Long 等)或 POJO 時(shí),SpringBoot 會自動綁定 URL 參數(shù) / 表單參數(shù)到方法參數(shù)。
- 使用場景:簡單表單提交、參數(shù)名與 POJO 字段名完全一致的場景。
- 核心用法:
// 1. 簡單類型自動綁定(訪問路徑:/user/simple?name=李四)
@GetMapping("/simple")
public String simpleParam(String name) {
return "姓名:" + name;
}
// 2. POJO自動綁定(訪問路徑:/user/pojo?name=李四&age=22)
@GetMapping("/pojo")
public String pojoParam(UserDTO userDTO) {
return "姓名:" + userDTO.getName() + ",年齡:" + userDTO.getAge();
}- 關(guān)鍵說明:僅適用于 URL 參數(shù) / 表單參數(shù)(
application/x-www-form-urlencoded),無法綁定 JSON 請求體。
總結(jié)
- @PathVariable:綁定 URL 路徑中的動態(tài)參數(shù)(RESTful 接口核心);
- @RequestParam:綁定 URL 查詢參數(shù)(?key=value),支持必傳 / 默認(rèn)值配置;
- @RequestBody:綁定 JSON 請求體到 POJO(POST/PUT 傳遞復(fù)雜數(shù)據(jù));
- @RequestHeader/@CookieValue:分別綁定請求頭、Cookie 中的參數(shù);
- 無注解自動綁定:適用于簡單 URL / 表單參數(shù),無需額外注解。
核心原則:根據(jù)參數(shù)位置(路徑、查詢、請求體、請求頭)選擇對應(yīng)注解,復(fù)雜數(shù)據(jù)用@RequestBody,簡單篩選用@RequestParam,RESTful 資源標(biāo)識用@PathVariable。
到此這篇關(guān)于SpringBoot 中處理接口傳參時(shí)常用的注解的文章就介紹到這了,更多相關(guān)SpringBoot 接口傳參常用注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot和Vue接口如何調(diào)用傳參
- SpringBoot中REST API 接口傳參的實(shí)現(xiàn)
- Springboot自定義注解&傳參&簡單應(yīng)用方式
- SpringBoot接口獲取參數(shù)的常用注解詳解
- SpringBoot通過注解監(jiān)測Controller接口的代碼示例
- 關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore
- springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實(shí)現(xiàn)
- SpringBoot利用@Retryable注解實(shí)現(xiàn)接口重試
- springboot通過注解、接口創(chuàng)建定時(shí)任務(wù)詳解
相關(guān)文章
Spring6.x對調(diào)度和異步執(zhí)行的注解支持示例詳解
這篇文章主要為大家介紹了Spring6.x對調(diào)度和異步執(zhí)行的注解支持示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
java客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
java實(shí)現(xiàn)合并兩個(gè)已經(jīng)排序的列表實(shí)例代碼
這篇文章主要介紹了java實(shí)現(xiàn)合并兩個(gè)已經(jīng)排序的列表實(shí)例代碼,有需要的朋友可以參考一下2013-12-12
解決java調(diào)用dll報(bào)Unable to load library錯(cuò)誤的問題
這篇文章主要介紹了解決java調(diào)用dll報(bào)Unable to load library錯(cuò)誤的問題。具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

