Spring @RequestMapping 注解及使用技巧詳解
@RequestMapping
是 Spring MVC 中 定義請求映射規(guī)則的核心注解,用于將 HTTP 請求映射到 Controller 處理方法。以下通過場景化解釋其功能、參數(shù)及使用技巧:
一、核心作用
URL 路徑映射
將特定 URL 請求路由到對應(yīng)的 Controller 方法。
@Controller @RequestMapping("/user") // 類級別路徑,所有方法路徑前添加 /user public class UserController { @RequestMapping("/profile") // 完整路徑:/user/profile public String profile() { return "user/profile"; } }
支持多種HTTP方法
通過 method
參數(shù)限定請求方法(GET、POST等)。
@RequestMapping(value = "/create", method = RequestMethod.POST) public String createUser(User user) { userService.save(user); return "redirect:/user/list"; }
多請求處理
支持同時響應(yīng)多個 URL 路徑或請求參數(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請求方法(GET、POST等) | method = RequestMethod.PUT |
params | 要求請求必須包含特定參數(shù) | params = "type=admin" (參數(shù)須為 type=admin ) |
headers | 限制請求頭條件 | headers = "Content-Type=application/json" |
consumes | 指定處理的請求內(nèi)容類型(Content-Type) | consumes = MediaType.APPLICATION_JSON_VALUE |
produces | 指定響應(yīng)內(nèi)容的類型(Accept頭匹配) | produces = "text/plain;charset=UTF-8" |
三、快捷組合注解
Spring 4.3+ 提供簡化的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(); } }
四、動態(tài)路徑參數(shù)(@PathVariable)
通過 {變量名}
語法捕獲 URL 路徑中的動態(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"; }
五、匹配請求參數(shù)(params條件)
要求存在某個參數(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)_突問題
- 問題:多個處理方法映射到同一路徑導(dǎo)致沖突。
- 解決:通過
method
或params
進一步區(qū)分請求。
@GetMapping("/edit") public String editForm() { ... } @PostMapping("/edit") public String saveEdit(User user) { ... }
2. 模糊匹配優(yōu)先問題
- 問題:
/user/*
和/user/123
同時存在時,優(yōu)先匹配更具體的路徑。 - 規(guī)則:Spring 優(yōu)先匹配精確路徑,再匹配通配符路徑。
七、最佳實踐
RESTful 風(fēng)格設(shè)計
使用HTTP方法區(qū)分操作:
GET
→ 查詢資源POST
→ 新增資源PUT
→ 更新完整資源PATCH
→ 部分更新資源DELETE
→ 刪除資源
顯式指定 Content-Type
使用 consumes
和 produces
明確請求與響應(yīng)格式:
@PostMapping(value = "/create", consumes = "application/json", produces = "application/json") public User createUserJson(@RequestBody User user) { ... }
推薦使用組合注解
優(yōu)先用 @GetMapping
、@PostMapping
,提升代碼可讀性。
八、其他特性
Ant風(fēng)格通配符支持:
?
: 匹配單個字符*
: 匹配任意數(shù)量的字符(不包含路徑分隔符)**
: 跨多級路徑匹配(例如/api/**
匹配/api/users/123
)
@GetMapping("/files/*.txt") // 匹配 /files/note.txt 或 /files/data.txt public String handleTextFiles() { ... }
總結(jié)
- 核心定位:
@RequestMapping
是定義 HTTP 請求入口的關(guān)鍵注解。 - 簡化開發(fā):通過 組合注解 + PathVariable + 參數(shù)條件 實現(xiàn) RESTful 接口。
- 注意點:確保路徑唯一性,避免沖突;優(yōu)先使用組合注解提升代碼清晰度。
到此這篇關(guān)于Spring @RequestMapping 注解及使用技巧詳解的文章就介紹到這了,更多相關(guān)Spring @RequestMapping 注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化
本篇文章主要介紹了詳解SpringBoot初始教程之Tomcat、Https配置以及Jetty優(yōu)化,具有一定的參考價值,有興趣的可以了解一下2017-09-09Spring中自定義數(shù)據(jù)類型轉(zhuǎn)換的方法詳解
Spring3引入了一個core.onvert包,提供一個通用類型轉(zhuǎn)換系統(tǒng)。在Spring容器中,可以使用這個系統(tǒng)作為PropertyEditor實現(xiàn)的替代,將外部化的bean屬性值字符串轉(zhuǎn)換為所需的屬性類型。本文將詳解這一系統(tǒng)的使用方法,需要的可以參考一下2022-06-06序列化版本號serialVersionUID的作用_動力節(jié)點Java學(xué)院整理
Java序列化是將一個對象編碼成一個字節(jié)流,反序列化將字節(jié)流編碼轉(zhuǎn)換成一個對象,這篇文章主要介紹了序列化版本號serialVersionUID的作用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Java數(shù)據(jù)類型之細講char類型與編碼關(guān)系
這幾天一直在復(fù)習(xí)Java基礎(chǔ)知識,特地寫了一篇文章來做一下筆記,文中有非常詳細的圖文示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05