關(guān)于@RequestBody,@PathVariable,無注解使用及說明
更新時間:2025年10月17日 09:35:40 作者:明明清爽
本文詳細介紹了@RequestBody、@PathVariable和無注解三種參數(shù)注解的使用場景、核心特征及對比,總結(jié):根據(jù)數(shù)據(jù)類型和場景選擇合適注解,可提升接口規(guī)范性和性能
參數(shù)注解使用場景完整指南
1. @RequestBody 使用場景
核心特征:
- HTTP方法:主要用于 POST、PUT、PATCH
- 數(shù)據(jù)來源:HTTP請求體 (Request Body)
- Content-Type:通常是
application/json
適用場景:
// 場景1:用戶登錄 - 敏感數(shù)據(jù)
@PostMapping("/login")
public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO) {
// 原因:用戶名密碼敏感,需要在請求體中加密傳輸
}
// 場景2:新增員工 - 復(fù)雜對象
@PostMapping
public Result save(@RequestBody EmployeeDTO employeeDTO) {
// 原因:多個字段的復(fù)雜對象,JSON格式更清晰
}
// 場景3:修改員工信息 - 更新操作
@PutMapping
public Result update(@RequestBody EmployeeDTO employeeDTO) {
// 原因:修改操作通常用PUT,需要傳遞完整對象
}
// 場景4:批量操作
@PostMapping("/batch")
public Result batchSave(@RequestBody List<EmployeeDTO> employees) {
// 原因:批量數(shù)據(jù),數(shù)組/列表格式
}
2. @PathVariable 使用場景
核心特征:
- 數(shù)據(jù)來源:URL路徑中的變量部分
- 用途:資源標識符,符合RESTful設(shè)計
- HTTP方法:GET、PUT、DELETE等
適用場景:
// 場景1:根據(jù)ID查詢 - 資源標識
@GetMapping("/{id}")
public Result<Employee> getById(@PathVariable Long id) {
// URL: /admin/employee/123
// 原因:ID是資源的唯一標識符
}
// 場景2:根據(jù)ID刪除 - 資源操作
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) {
// URL: /admin/employee/123
// 原因:明確指定要刪除的資源
}
// 場景3:狀態(tài)切換 - 動作+資源
@PostMapping("/status/{status}")
public Result startOrStop(@PathVariable Integer status, Long id) {
// URL: /admin/employee/status/1?id=123
// 原因:status是操作類型,屬于URL路徑的一部分
}
// 場景4:多級資源路徑
@GetMapping("/department/{deptId}/employees/{empId}")
public Result getEmployeeInDept(@PathVariable Long deptId, @PathVariable Long empId) {
// URL: /admin/department/10/employees/123
// 原因:表示部門下的特定員工資源
}
3. 無注解使用場景
核心特征:
- 數(shù)據(jù)來源:URL查詢參數(shù) (Query Parameters)
- 用途:查詢條件、過濾參數(shù)、分頁參數(shù)
- HTTP方法:主要是GET
適用場景:
// 場景1:分頁查詢 - 查詢條件
@GetMapping("/page")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) {
// URL: /admin/employee/page?name=張&page=1&pageSize=10
// 原因:簡單查詢條件,支持緩存和書簽
}
// 場景2:簡單參數(shù)查詢
@GetMapping("/search")
public Result<List<Employee>> search(String keyword, Integer status) {
// URL: /admin/employee/search?keyword=張三&status=1
// 原因:簡單的過濾條件
}
// 場景3:可選參數(shù)查詢
@GetMapping("/list")
public Result<List<Employee>> list(String department, Integer level) {
// URL: /admin/employee/list?department=IT&level=2
// 原因:可選的查詢條件,可以為空
}
詳細對比表格
| 注解類型 | HTTP方法 | 數(shù)據(jù)位置 | 使用場景 | URL示例 | 優(yōu)缺點 |
|---|---|---|---|---|---|
| @RequestBody | POST/PUT/PATCH | 請求體 | 復(fù)雜對象、敏感數(shù)據(jù)、批量操作 | POST /employee + JSON | ?復(fù)雜數(shù)據(jù) ?不支持緩存 |
| @PathVariable | GET/PUT/DELETE | URL路徑 | 資源標識符、層級資源 | GET /employee/123 | ?RESTful ?語義清晰 |
| 無注解 | GET | URL參數(shù) | 查詢條件、分頁、過濾 | GET /employee?name=張&page=1 | ?支持緩存 ?書簽友好 |
實際項目中的應(yīng)用示例
員工管理模塊完整示例
@RestController
@RequestMapping("/admin/employee")
public class EmployeeController {
// 1. 登錄 - @RequestBody (敏感數(shù)據(jù))
@PostMapping("/login")
public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO dto) {
// POST /admin/employee/login + JSON
}
// 2. 新增 - @RequestBody (復(fù)雜對象)
@PostMapping
public Result save(@RequestBody EmployeeDTO dto) {
// POST /admin/employee + JSON
}
// 3. 分頁查詢 - 無注解 (查詢條件)
@GetMapping("/page")
public Result<PageResult> page(EmployeePageQueryDTO dto) {
// GET /admin/employee/page?name=張&page=1&pageSize=10
}
// 4. 根據(jù)ID查詢 - @PathVariable (資源標識)
@GetMapping("/{id}")
public Result<Employee> getById(@PathVariable Long id) {
// GET /admin/employee/123
}
// 5. 修改 - @RequestBody (更新對象)
@PutMapping
public Result update(@RequestBody EmployeeDTO dto) {
// PUT /admin/employee + JSON
}
// 6. 啟用禁用 - @PathVariable + 無注解 (狀態(tài)+ID)
@PostMapping("/status/{status}")
public Result startOrStop(@PathVariable Integer status, Long id) {
// POST /admin/employee/status/1?id=123
}
// 7. 刪除 - @PathVariable (資源標識)
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) {
// DELETE /admin/employee/123
}
}
決策流程圖
是否傳輸復(fù)雜對象或敏感數(shù)據(jù)?
├─ 是 → 使用 @RequestBody (POST/PUT + JSON)
└─ 否 → 是否資源標識符?
├─ 是 → 使用 @PathVariable (/{id})
└─ 否 → 無注解 (URL參數(shù),GET請求)
記憶口訣
- @RequestBody = “復(fù)雜敏感批量” (復(fù)雜對象、敏感數(shù)據(jù)、批量操作)
- @PathVariable = “資源標識符” (ID、路徑參數(shù)、RESTful)
- 無注解 = “查詢過濾分頁” (查詢條件、過濾器、分頁參數(shù))
特殊場景說明
混合使用場景
// 組合1:路徑參數(shù) + 查詢參數(shù)
@GetMapping("/department/{deptId}/employees")
public Result getEmployeesByDept(@PathVariable Long deptId,
String keyword,
Integer page) {
// GET /admin/department/10/employees?keyword=張&page=1
}
// 組合2:路徑參數(shù) + 請求體
@PutMapping("/{id}")
public Result update(@PathVariable Long id,
@RequestBody EmployeeDTO dto) {
// PUT /admin/employee/123 + JSON
// ID確定資源,DTO包含更新數(shù)據(jù)
}
總結(jié)
這三種注解的選擇遵循以下原則:
- @RequestBody - 數(shù)據(jù)復(fù)雜度高、安全性要求高、修改操作
- @PathVariable - 資源定位、RESTful風(fēng)格、層級關(guān)系
- 無注解 - 查詢場景、性能優(yōu)化、用戶體驗
選擇正確的注解不僅能讓代碼更規(guī)范,還能提升API的性能和用戶體驗!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringData JPA實現(xiàn)查詢分頁demo
本篇文章主要介紹了SpringData JPA實現(xiàn)查詢分頁demo,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
SpringBoot2.動態(tài)@Value的實現(xiàn)方式
這篇文章主要介紹了SpringBoot2.動態(tài)@Value的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
java實現(xiàn)從網(wǎng)上下載圖片到本地的方法
這篇文章主要介紹了java實現(xiàn)從網(wǎng)上下載圖片到本地的方法,涉及java針對文件操作的相關(guān)技巧,非常簡單實用,需要的朋友可以參考下2015-07-07
圖數(shù)據(jù)庫NebulaGraph的Java 數(shù)據(jù)解析實踐與指導(dǎo)詳解
這篇文章主要介紹了圖數(shù)據(jù)庫NebulaGraph的Java 數(shù)據(jù)解析實踐與指導(dǎo)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
mybatisPlus如何使用MetaObjectHandler對字段進行更新
這篇文章主要介紹了mybatisPlus如何使用MetaObjectHandler對字段進行更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04

