推荐答案
@RequestMapping
是 Spring MVC 中最常用的注解之一,用于将 HTTP 请求映射到特定的处理器方法或类上。它可以用在类级别或方法级别,用于定义请求的 URL 路径、HTTP 方法(如 GET、POST 等)、请求参数、请求头等信息。
主要作用:
- URL 映射:将特定的 URL 路径映射到控制器方法或类上。
- HTTP 方法映射:指定处理哪种 HTTP 请求方法(如 GET、POST、PUT、DELETE 等)。
- 请求参数映射:根据请求参数的条件来映射请求。
- 请求头映射:根据请求头的条件来映射请求。
- 内容类型映射:根据请求的内容类型(如
application/json
)来映射请求。
示例:
-- -------------------- ---- ------- ----------- ------------------------- ------ ----- -------------- - --------------------- - -------- ------ - ------------------ ------ ------ --------------------------- ---- --- ----- ------ - -- ----------- ------ ------- - --------------------- - ---------- ------ - ------------------- ------ ------ -------------------------- ---- ----- - -- --------- ------ ------------------ - -
在上面的示例中:
/users
是类级别的 URL 映射。/users/{id}
是方法级别的 URL 映射,处理 GET 请求。/users/create
是方法级别的 URL 映射,处理 POST 请求。
本题详细解读
1. 类级别与方法级别的映射
@RequestMapping
可以用在类级别和方法级别。类级别的注解定义了控制器的基础 URL 路径,而方法级别的注解则定义了具体的请求路径和 HTTP 方法。
2. 支持多种 HTTP 方法
@RequestMapping
可以通过 method
属性指定处理的 HTTP 方法,如 GET
、POST
、PUT
、DELETE
等。如果不指定 method
,则默认处理所有 HTTP 方法。
3. 路径变量
通过 @PathVariable
注解,可以将 URL 中的动态部分(如 /users/{id}
中的 {id}
)绑定到方法参数上。
4. 请求参数与请求头
@RequestMapping
还支持通过 params
和 headers
属性来进一步细化请求的映射条件。例如:
@RequestMapping(value = "/search", method = RequestMethod.GET, params = "query") public String search(@RequestParam("query") String query) { // 处理搜索逻辑 return "searchResults"; }
上述代码表示只有当请求中包含 query
参数时,才会映射到该方法。
5. 内容类型映射
通过 consumes
和 produces
属性,可以指定请求的内容类型和响应的内容类型。例如:
@RequestMapping(value = "/json", method = RequestMethod.POST, consumes = "application/json", produces = "application/json") public @ResponseBody User createUserJson(@RequestBody User user) { // 处理 JSON 格式的请求并返回 JSON 响应 return user; }
6. 组合注解
Spring 4.3 引入了组合注解,如 @GetMapping
、@PostMapping
等,它们是 @RequestMapping
的简化版本,专门用于处理特定的 HTTP 方法。
7. 默认处理器
如果 @RequestMapping
没有指定路径,则默认映射到根路径 /
。