首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC @RequestMapping 映射機制全解析:URL、Method、參數、Header、媒體類型六大維度

     編輯:Java 綜合教學

HTTP 請求結構回顧

HTTP請求結構 @RequestMapping 將 HTTP 請求的各維度信息映射到 Handler 方法。

類級 vs 方法級映射

  • 類級:提供基礎路徑(namespace),如 @RequestMapping("/test")
  • 方法級:相對於類級路徑,如 @RequestMapping("/method") → 完整路徑 /test/method

六大核心屬性詳解

1. value / path:URI 路徑匹配

  • 單值:@RequestMapping("/hello")
  • 多值(OR 關係):@RequestMapping({"/url1", "/url2"})
  • Ant 風格通配:
    • ? 匹配單字符
    • * 匹配任意字符(單層)
    • ** 匹配多層路徑
  • 佔位符:@RequestMapping("/user/{id}") 配合 @PathVariable

2. method:HTTP 方法限制

@RequestMapping(value="/save", method=RequestMethod.POST)
@RequestMapping(value="/multi", method={RequestMethod.GET, RequestMethod.POST})

類級指定則所有方法繼承限制。

3. params:請求參數條件

表達式含義
param必須包含該參數
param=value參數值必須等於 value
param!=value參數值不等於 value
!param必須不包含該參數

示例:@RequestMapping(params={"userName", "age!=23"})

4. headers:請求頭條件

語法同 params,支援媒體類型通配:

@RequestMapping(headers="Accept-Language=zh,zh-CN;q=0.8")
@RequestMapping(headers="Content-Type=text/*")  // 匹配 text/html, text/plain 等

5. consumes:消費媒體類型(請求 Content-Type)

@RequestMapping(consumes="application/json")
@RequestMapping(consumes={"application/json", "application/xml"})
@RequestMapping(consumes="!application/json")  // 排除

服務端作為消費者,處理客戶端發送的數據格式。

6. produces:生產媒體類型(響應 Content-Type / 客戶端 Accept)

@RequestMapping(produces="application/json;charset=UTF-8")
@RequestMapping(produces={"application/json", "application/xml"})

服務端作為生產者,根據客戶端 Accept 頭進行內容協商。

屬性組合邏輯

  • 同屬性多值:OR 關係
  • 不同屬性共存:AND 關係(所有條件均滿足才匹配)

最佳實踐

  • RESTful 風格:類級定義資源集合(/users),方法級定義操作(GET、POST、PUT、DELETE)
  • 優先使用 @GetMapping/@PostMapping 等組合註解(Spring 4.3+)
  • 媒體類型協商統一用 produces/consumes,避免手動解析 Header
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved