Spring框架中的@RequestMapping注解详解
Spring框架中的@RequestMapping注解详解
@RequestMapping是Spring框架中的一个核心注解,主要用于处理HTTP请求的地址映射。它属于Spring MVC框架的一部分,用于将接收到的Web请求映射到特定的处理器类或处理器方法上。本文将详细介绍@RequestMapping注解的使用方法和相关属性。
@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() {
// ...
}