Spring MVC 中的 `@RequestMapping` 注解有什么作用?

推荐答案

@RequestMapping 是 Spring MVC 中最常用的注解之一,用于将 HTTP 请求映射到特定的处理器方法或类上。它可以用在类级别或方法级别,用于定义请求的 URL 路径、HTTP 方法(如 GET、POST 等)、请求参数、请求头等信息。

主要作用:

  1. URL 映射:将特定的 URL 路径映射到控制器方法或类上。
  2. HTTP 方法映射:指定处理哪种 HTTP 请求方法(如 GET、POST、PUT、DELETE 等)。
  3. 请求参数映射:根据请求参数的条件来映射请求。
  4. 请求头映射:根据请求头的条件来映射请求。
  5. 内容类型映射:根据请求的内容类型(如 application/json)来映射请求。

示例:

-- -------------------- ---- -------
-----------
-------------------------
------ ----- -------------- -

    --------------------- - -------- ------ - ------------------
    ------ ------ --------------------------- ---- --- ----- ------ -
        -- -----------
        ------ -------
    -

    --------------------- - ---------- ------ - -------------------
    ------ ------ -------------------------- ---- ----- -
        -- ---------
        ------ ------------------
    -
-

在上面的示例中:

  • /users 是类级别的 URL 映射。
  • /users/{id} 是方法级别的 URL 映射,处理 GET 请求。
  • /users/create 是方法级别的 URL 映射,处理 POST 请求。

本题详细解读

1. 类级别与方法级别的映射

@RequestMapping 可以用在类级别和方法级别。类级别的注解定义了控制器的基础 URL 路径,而方法级别的注解则定义了具体的请求路径和 HTTP 方法。

2. 支持多种 HTTP 方法

@RequestMapping 可以通过 method 属性指定处理的 HTTP 方法,如 GETPOSTPUTDELETE 等。如果不指定 method,则默认处理所有 HTTP 方法。

3. 路径变量

通过 @PathVariable 注解,可以将 URL 中的动态部分(如 /users/{id} 中的 {id})绑定到方法参数上。

4. 请求参数与请求头

@RequestMapping 还支持通过 paramsheaders 属性来进一步细化请求的映射条件。例如:

上述代码表示只有当请求中包含 query 参数时,才会映射到该方法。

5. 内容类型映射

通过 consumesproduces 属性,可以指定请求的内容类型和响应的内容类型。例如:

6. 组合注解

Spring 4.3 引入了组合注解,如 @GetMapping@PostMapping 等,它们是 @RequestMapping 的简化版本,专门用于处理特定的 HTTP 方法。

7. 默认处理器

如果 @RequestMapping 没有指定路径,则默认映射到根路径 /

纠错
反馈