Spring @RequestMapping 注解及使用技巧詳解
@RequestMapping 是 Spring MVC 中 定義請(qǐng)求映射規(guī)則的核心注解,用于將 HTTP 請(qǐng)求映射到 Controller 處理方法。以下通過場(chǎng)景化解釋其功能、參數(shù)及使用技巧:
一、核心作用
URL 路徑映射
將特定 URL 請(qǐng)求路由到對(duì)應(yīng)的 Controller 方法。
@Controller
@RequestMapping("/user") // 類級(jí)別路徑,所有方法路徑前添加 /user
public class UserController {
@RequestMapping("/profile") // 完整路徑:/user/profile
public String profile() {
return "user/profile";
}
}支持多種HTTP方法
通過 method 參數(shù)限定請(qǐng)求方法(GET、POST等)。
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createUser(User user) {
userService.save(user);
return "redirect:/user/list";
}多請(qǐng)求處理
支持同時(shí)響應(yīng)多個(gè) URL 路徑或請(qǐng)求參數(shù)。
@RequestMapping(value = {"/list", "/all"}, method = RequestMethod.GET)
public String listUsers(Model model) {
model.addAttribute("users", userService.findAll());
return "user/list";
}二、關(guān)鍵參數(shù)說明
| 參數(shù) | 作用描述 | 示例 |
|---|---|---|
value / path | 指定映射的URL路徑(可多路徑) | @RequestMapping("/api/user") |
method | 限制HTTP請(qǐng)求方法(GET、POST等) | method = RequestMethod.PUT |
params | 要求請(qǐng)求必須包含特定參數(shù) | params = "type=admin" (參數(shù)須為 type=admin) |
headers | 限制請(qǐng)求頭條件 | headers = "Content-Type=application/json" |
consumes | 指定處理的請(qǐng)求內(nèi)容類型(Content-Type) | consumes = MediaType.APPLICATION_JSON_VALUE |
produces | 指定響應(yīng)內(nèi)容的類型(Accept頭匹配) | produces = "text/plain;charset=UTF-8" |
三、快捷組合注解
Spring 4.3+ 提供簡(jiǎn)化的HTTP方法注解,替代 method 參數(shù)配置:
@GetMapping→@RequestMapping(method = GET)@PostMapping→@RequestMapping(method = POST)@PutMapping、@DeleteMapping、@PatchMapping
用法示例:
@RestController
@RequestMapping("/api/v1")
public class UserApiController {
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody User user) {
userService.save(user);
return ResponseEntity.created(URI.create("/users/" + user.getId())).build();
}
}四、動(dòng)態(tài)路徑參數(shù)(@PathVariable)
通過 {變量名} 語(yǔ)法捕獲 URL 路徑中的動(dòng)態(tài)值,搭配 @PathVariable 使用:
@GetMapping("/detail/{userId}/{type}")
public String userDetail(
@PathVariable("userId") Long id,
@PathVariable String type // 變量名相同可省略參數(shù)
) {
// 示例URL:/user/detail/123/admin
// id=123, type="admin"
return "user/detail";
}五、匹配請(qǐng)求參數(shù)(params條件)
要求存在某個(gè)參數(shù)
@RequestMapping(value = "/search", params = "keyword")
public String searchByKeyword(String keyword) { ... }參數(shù)值匹配指定模式
@GetMapping(value = "/filter", params = "status=active")
public List<User> getActiveUsers() { ... }六、常見問題與解決
1. 路徑?jīng)_突問題
- 問題:多個(gè)處理方法映射到同一路徑導(dǎo)致沖突。
- 解決:通過
method或params進(jìn)一步區(qū)分請(qǐng)求。
@GetMapping("/edit")
public String editForm() { ... }
@PostMapping("/edit")
public String saveEdit(User user) { ... }2. 模糊匹配優(yōu)先問題
- 問題:
/user/*和/user/123同時(shí)存在時(shí),優(yōu)先匹配更具體的路徑。 - 規(guī)則:Spring 優(yōu)先匹配精確路徑,再匹配通配符路徑。
七、最佳實(shí)踐
RESTful 風(fēng)格設(shè)計(jì)
使用HTTP方法區(qū)分操作:
GET→ 查詢資源POST→ 新增資源PUT→ 更新完整資源PATCH→ 部分更新資源DELETE→ 刪除資源
顯式指定 Content-Type
使用 consumes 和 produces 明確請(qǐng)求與響應(yīng)格式:
@PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
public User createUserJson(@RequestBody User user) { ... }推薦使用組合注解
優(yōu)先用 @GetMapping、@PostMapping,提升代碼可讀性。
八、其他特性
Ant風(fēng)格通配符支持:
?: 匹配單個(gè)字符*: 匹配任意數(shù)量的字符(不包含路徑分隔符)**: 跨多級(jí)路徑匹配(例如/api/**匹配/api/users/123)
@GetMapping("/files/*.txt") // 匹配 /files/note.txt 或 /files/data.txt
public String handleTextFiles() { ... }總結(jié)
- 核心定位:
@RequestMapping是定義 HTTP 請(qǐng)求入口的關(guān)鍵注解。 - 簡(jiǎn)化開發(fā):通過 組合注解 + PathVariable + 參數(shù)條件 實(shí)現(xiàn) RESTful 接口。
- 注意點(diǎn):確保路徑唯一性,避免沖突;優(yōu)先使用組合注解提升代碼清晰度。
到此這篇關(guān)于Spring @RequestMapping 注解及使用技巧詳解的文章就介紹到這了,更多相關(guān)Spring @RequestMapping 注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis collection關(guān)聯(lián)查詢多個(gè)參數(shù)方式
在使用MyBatis進(jìn)行關(guān)聯(lián)查詢時(shí),往往需要根據(jù)多個(gè)參數(shù)進(jìn)行查詢,例如,使用evtId和businessType作為查詢條件,同時(shí)在resultMap中配置id和businessType1作為結(jié)果映射,這種情況下,可以通過<sql>標(biāo)簽定義參數(shù)模板,或者使用@Param注解指定參數(shù)名稱2024-10-10
Java爬蟲范例之使用Htmlunit爬取學(xué)校教務(wù)網(wǎng)課程表信息
htmlunit 是一款開源的java 頁(yè)面分析工具,讀取頁(yè)面后,可以有效的使用htmlunit分析頁(yè)面上的內(nèi)容。項(xiàng)目可以模擬瀏覽器運(yùn)行,被譽(yù)為java瀏覽器的開源實(shí)現(xiàn)。今天我們用這款分析工具來爬取學(xué)校教務(wù)網(wǎng)課程表信息2021-11-11
Java通過MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法
MyBatis框架由Java的JDBC API進(jìn)一步封裝而來,在操作數(shù)據(jù)庫(kù)方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對(duì)MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:2016-06-06
java策略枚舉:消除在項(xiàng)目里大批量使用if-else的優(yōu)雅姿勢(shì)
這篇文章主要給大家介紹了關(guān)于Java徹底消滅if-else的8種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2021-06-06
java計(jì)算機(jī)器人的運(yùn)動(dòng)范圍
這篇文章主要為大家詳細(xì)介紹了java計(jì)算機(jī)器人運(yùn)動(dòng)范圍的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
教你利用JAVA實(shí)現(xiàn)可以自行關(guān)閉服務(wù)器的方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著利用JAVA實(shí)現(xiàn)可以自行關(guān)閉服務(wù)器的方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Lucene實(shí)現(xiàn)多種高級(jí)搜索形式
這篇文章主要介紹了Lucene實(shí)現(xiàn)多種高級(jí)搜索形式的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java使用正則提取字符串中的內(nèi)容的詳細(xì)步驟
這篇文章主要介紹了Java中使用正則表達(dá)式提取字符串內(nèi)容的方法,通過Pattern和Matcher類實(shí)現(xiàn),涵蓋編譯正則、查找匹配、分組捕獲、數(shù)字與郵箱提取場(chǎng)景,以及命名分組、非貪婪匹配等技巧,需要的朋友可以參考下2025-08-08
基于Springboot+Vue實(shí)現(xiàn)的在線答題闖關(guān)系統(tǒng)全過程
這篇文章主要介紹了基于Springboot+Vue實(shí)現(xiàn)的在線答題闖關(guān)系統(tǒng)的相關(guān)資料,文中包括前端Vue.js、后端SpringBoot及MySQL數(shù)據(jù)庫(kù)的使用,系統(tǒng)功能涵蓋順序出題、體型練習(xí)、隨機(jī)出題、錯(cuò)題本、收藏題和答題統(tǒng)計(jì)等,需要的朋友可以參考下2024-12-12

