@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属性介绍
-
value:指定请求的 URL 路径。可以是一个或多个值,如果指定多个值,则使用数组形式。路径可以包含路径变量,这些变量可以在方法参数中通过
@PathVariable
注解来访问。 -
method:指定请求的 HTTP 方法类型(如 GET、POST、PUT、DELETE 等)。可以是枚举
RequestMethod
的一个或多个值,如果指定多个值,则使用数组形式。 -
params:指定请求必须满足的查询参数条件。例如,
params = "param1=value1"
表示请求必须包含param1
参数,并且其值为value1
。 -
headers:指定请求必须满足的 HTTP 头条件。例如,
headers = "Accept=application/json"
表示请求的Accept
头必须是application/json
。 -
consumes:指定控制器方法能够处理的请求媒体类型(Content-Type)。这可以用来限制方法只处理特定类型的请求体。
-
produces:指定控制器方法能够产生的响应媒体类型。这可以用来指定方法的响应内容类型,例如
produces = "application/json"
。 -
pathVars:指定路径变量的名称,这在某些情况下可以用于更细粒度的控制。
-
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() {
// ...
}