文章目錄
- 一、簡介
- 二、常用注解分類
- 1、請求映射類(處理 URL 與 HTTP 方法的綁定)
- 2、參數綁定類(從請求中獲取數據并綁定到方法參數)
- 3、控制器與增強類(標識控制器及全局增強)
- 4、異常與響應處理類(處理接口異常和響應狀態)
- 5、數據模型與會話類(處理模型數據和會話存儲)
- 6、其他輔助類
- 三、查詢方式寫法
- 1、路徑變量
- 2、查詢變量
- 3、實體類參數
- 四、其它Springboot擴展參數
一、簡介
在 HTTP 協議的規范中,請求方法與資源操作有著明確的對應關系:GET 和 POST 是其中用于查詢請求的常見方式,而除此之外,POST、DELETE、PUT 還分別對應著資源的新增、刪除和修改操作。?
其中,GET 方法的設計初衷是 “只查不改”—— 無論執行多少次,它的作用僅僅是獲取服務器上的資源,不會對資源本身產生任何修改。這種特性帶來了兩大優勢:一是可緩存性,瀏覽器或代理服務器可以緩存 GET 請求的結果,從而提升后續訪問的效率;二是可重復執行性,多次發起相同的 GET 請求,得到的結果始終一致,也不會引發意外的副作用。這兩點共同決定了 GET 方法不適合用于修改操作。?
而在 Spring Boot 框架中,GET 方法成為了獲取資源的首選方式,尤其適用于查詢場景、參數可公開、具備冪等性(多次操作結果一致)且需要緩存的業務需求。不過在使用時,需要特別注意兩個要點:一是 URL 存在長度限制,過長的參數可能導致請求失敗;二是參數的安全性,由于 GET 請求的參數會暴露在 URL 中,因此要避免傳遞敏感數據,更不能用它來執行修改服務器狀態的操作。
二、常用注解分類
1、請求映射類(處理 URL 與 HTTP 方法的綁定)
核心是將 HTTP 請求映射到控制器方法,通過 “路徑 + HTTP 方法” 定位接口。
- 基礎注解:@RequestMapping(最底層,可指定路徑、請求方法、參數等)。
- 衍生注解:@GetMapping(限定 GET 方法)、@PostMapping(POST)、@PutMapping(PUT)、@DeleteMapping(DELETE)、@PatchMapping(PATCH)。
其中衍生注解是@RequestMapping的簡化版,如@GetMapping = @RequestMapping(method = RequestMethod.GET))
2、參數綁定類(從請求中獲取數據并綁定到方法參數)
核心是從 HTTP 請求的不同位置(路徑、查詢參數、請求體等)提取數據,綁定到控制器方法的參數上。
- 路徑參數:@PathVariable(獲取 URL 路徑中的占位符,如/users/{id}中的id)。
- 查詢參數:@RequestParam(獲取 URL 中?key=value形式的參數)。
- 請求體:@RequestBody(獲取 HTTP 請求體中的數據,通常是 JSON/XML,用于 POST/PUT 等)。
- 請求頭 / Cookie:@RequestHeader(獲取請求頭信息,如User-Agent)、@CookieValue(獲取 Cookie 值)。
- 特殊參數:@MatrixVariable(獲取 URL 中;分隔的矩陣變量,如/books;author=魯迅)、@RequestPart(獲取multipart/form-data類型的數據,如文件上傳)。
- 域對象:@RequestAttribute(獲取請求域request中的屬性)、@SessionAttribute(獲取會話域session中的屬性)。
共性:都用于 “從請求中拿數據”,區別僅在于數據在請求中的位置(路徑、查詢串、請求體等)。
3、控制器與增強類(標識控制器及全局增強)
核心是標識控制器類,或對控制器進行全局增強(如異常處理、數據預處理)。
- 基礎控制器:@RestController(= @Controller + @ResponseBody,標識 REST 接口控制器,返回值直接作為響應體)。
- 全局增強:@ControllerAdvice(全局控制器增強,用于集中處理異常、全局數據綁定等)、@RestControllerAdvice(= @ControllerAdvice + @ResponseBody,增強 REST 接口,異常處理返回 JSON)。
4、異常與響應處理類(處理接口異常和響應狀態)
核心是控制接口的異常處理和 HTTP 響應狀態。
- 異常處理:@ExceptionHandler(處理控制器方法拋出的異常,結合@ControllerAdvice實現全局異常處理)。
- 響應狀態:@ResponseStatus(指定接口或異常處理返回的 HTTP 狀態碼,如 404、500)。
5、數據模型與會話類(處理模型數據和會話存儲)
核心是管理請求 / 會話中的數據,或綁定模型數據。
- 模型數據:@ModelAttribute(向模型中添加數據,或綁定請求參數到模型對象)。
- 會話存儲:@SessionAttributes(指定模型中的哪些屬性存入會話域,作用于類)、@SessionAttribute(從會話域中獲取屬性,作用于參數)。
6、其他輔助類
- 跨域處理:@CrossOrigin(解決跨域請求問題,指定允許的來源、方法等)。
- 數據綁定初始化:@InitBinder(自定義請求參數的綁定規則,如日期格式化、類型轉換)。
- 基礎父注解:@Mapping(所有請求映射注解的父注解,定義路徑映射的基本屬性)。
三、查詢方式寫法
1、路徑變量
路徑:/forlan/entity/query/{param1}
單個參數寫法
@GetMapping("/forlan/entity/query/{param1}")
public Result<List<ForlanVO>> queryList(@PathVariable("param1") Long param1)@GetMapping ("/forlan/entity/query/{param1}")
public Result<List<ForlanVO>> queryList(Long param1)
多個參數,必須加上@PathVariable
@GetMapping ("/forlan/entity/query/{param1}/{param2}")
public Result<List<ForlanVO>> queryList(
@PathVariable("param1") Long param1,
@PathVariable("param2") Long param2
)
2、查詢變量
路徑:/forlan/entity/filter?param1=xxx¶m2=yyy
@GetMapping("/forlan/entity/filter")
public Result<List<ForlanVO>> filterList(Long param1, Long param2)
基礎類型參數可省略 @RequestParam,如需配置默認值或必填項則需添加
@GetMapping ("/forlan/entity/filter")
public Result<List<ForlanVO>> filterList(
@RequestParam(required = false, defaultValue = "0") Integer page,
@RequestParam List<Long> ids
)
注意:集合類型參數必須添加 @RequestParam,否則會出現異常:No primary or default constructor found for interface java.util.List
原因:Spring MVC 嘗試實例化接口類型(List)時無法找到合適的構造器,需通過 @RequestParam 明確指定參數綁定方式
3、實體類參數
默認接收 form-data 格式參數
@PostMapping("/forlan/entity/search")
public Result<List<ForlanVO>> searchList (ForlanDTO dto)
如需接收 JSON 格式參數,需添加 @RequestBody
@PostMapping ("/forlan/entity/search")
public Result<List<ForlanVO>> searchList(@RequestBody ForlanDTO dto)
四、其它Springboot擴展參數
@JsonAlias(“xxx”):為字段提供一個或多個反序列化時的別名,適合兼容舊字段名或不同命名風格
示例:前端傳forlan或Forlan都能接收到參數
@JsonAlias("forlan")
private String Forlan;
@JsonProperty(“xxx”):定義序列化/反序列化時使用的主屬性名
序列化:Java 對象 → JSON 響應/文件
反序列化:JSON 請求/文件 → Java 對象