【spring】@RequestMapping注解学习

发布于:2024-05-22 ⋅ 阅读:(165) ⋅ 点赞:(0)

@RequestMapping介绍

官网地址:Mapping Requests :: Spring Framework

@RequestMapping 是Spring框架中的一个核心注解,主要用于处理HTTP请求的地址映射。它属于Spring MVC框架的一部分,用于将接收到的Web请求映射到特定的处理器类或处理器方法上。这个注解可以被应用于控制器类的级别和方法级别。具有以下特点和用途:

类级别应用:

  • @RequestMapping注解应用于控制器类上时,它提供了一个基础的URI路径前缀,该类中所有使用了@RequestMapping注解的方法都将在这个基础路径下进行进一步的映射。

方法级别应用:

  • 在方法级别,@RequestMapping用于详细指定处理特定HTTP请求的方法,如GET、POST等。它可以定义更精确的URI模板来匹配请求路径,并且可以包含请求参数、HTTP方法约束等详细信息。

为了简化代码,Spring 4.3 引入了更具体的注解,如 @GetMapping@PostMapping@PutMapping 和 @DeleteMapping,它们是 @RequestMapping 的快捷方式。

例如,@GetMapping("/hello") 等同于 @RequestMapping(value = "/hello", method = RequestMethod.GET)

@RequestMapping源码


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

	String name() default "";

	@AliasFor("path")
	String[] value() default {};

	@AliasFor("value")
	String[] path() default {};

	RequestMethod[] method() default {};

	String[] params() default {};

	String[] headers() default {};

	String[] consumes() default {};
	
	String[] produces() default {};

}
源代码截图

@RequestMapping属性介绍

  1. value:指定请求的 URL 路径。可以是一个或多个值,如果指定多个值,则使用数组形式。路径可以包含路径变量,这些变量可以在方法参数中通过 @PathVariable 注解来访问。

  2. method:指定请求的 HTTP 方法类型(如 GET、POST、PUT、DELETE 等)。可以是枚举 RequestMethod 的一个或多个值,如果指定多个值,则使用数组形式。

  3. params:指定请求必须满足的查询参数条件。例如,params = "param1=value1" 表示请求必须包含 param1 参数,并且其值为 value1

  4. headers:指定请求必须满足的 HTTP 头条件。例如,headers = "Accept=application/json" 表示请求的 Accept 头必须是 application/json

  5. consumes:指定控制器方法能够处理的请求媒体类型(Content-Type)。这可以用来限制方法只处理特定类型的请求体。

  6. produces:指定控制器方法能够产生的响应媒体类型。这可以用来指定方法的响应内容类型,例如 produces = "application/json"

  7. pathVars:指定路径变量的名称,这在某些情况下可以用于更细粒度的控制。

  8. name:为映射定义一个名称,这可以在 @SessionAttributes@InitBinder 注解中使用,以引用特定的请求映射。

代码示例

// 映射到 GET 请求 /users/{id}
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET)
public String getUser(@PathVariable("id") Long id) {
    // ...
}

// 映射到 POST 请求 /users,并且请求体必须是 JSON 格式
@RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json")
public String addUser(@RequestBody User user) {
    // ...
}

// 映射到 GET 请求 /data,并且请求必须包含名为 "type" 的查询参数
@RequestMapping(value = "/data", method = RequestMethod.GET, params = "type")
public String getData(@RequestParam("type") String type) {
    // ...
}

// 映射到 /api,并且只响应 Accept 头为 "application/json" 的请求
@RequestMapping(value = "/api", headers = "Accept=application/json")
public ResponseEntity<?> getApiResponse() {
    // ...
}

使用 glob 模式和通配符来映射请求: