一、基本介绍
@RequestMapping注解的作用是将HTTP请求映射到具体的处理方法上。它可以用于控制器类或方法上,用于定义请求的URL路径、请求方法、请求参数、请求头等信息,以便框架能够正确地将请求分派到相应的处理方法进行处理。
二、使用方法
1. 定义URL路径--value属性
通过指定@RequestMapping的value属性,可以将请求映射到指定的URL路径上。
@RequestMapping 注解可以修饰方法,还可以修饰类。当同时修饰类和方法时, 请求的 url 就是组合: /类请求值/方法请求值 。
在类级别上,@RequestMapping注解用于指定控制器类中所有处理方法的公共请求映射前缀。例如:
@Controller
@RequestMapping("/example")
public class ExampleController {
// ...
}
上述代码中,所有在ExampleController类中的处理方法,都会以"/example"作为请求映射前缀。
在方法级别上,@RequestMapping注解用于指定具体的HTTP请求映射路径和请求方法。例如:
@Controller
@RequestMapping("/example")
public class ExampleController {
@RequestMapping(value = "/hello")
public String hello() {
// 处理请求路径为/example/hello的逻辑
...
}
@RequestMapping(value = "/submit")
public String submit() {
// 处理请求路径为/example/submit的逻辑
...
}
}
上述代码中,hello()方法被映射到请求路径为"/example/hello",submit()方法被映射到请求路径为"/example/submit"。
@RequestMapping 支持 Ant 风格资源地址
1. ?:匹配文件名中的一个字符
2. *:匹配文件名中的任意字符
3. **:匹配多层路径
举例:
/user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL
/user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL
2. 指定请求方法--method属性
通过指定@RequestMapping的method属性,可以限定请求的HTTP方法。
请求 | 简写形式 | |
GET | @RequestMapping(method = RequestMethod.GET) | @GetMapping() |
POST | @RequestMapping(method = RequestMethod.POST) | @PostMapping() |
PUT | @RequestMapping(method = RequestMethod.PUT) | @PutMapping() |
DELETE | @RequestMapping(method = RequestMethod.DELETE) | @DeleteMapping() |
注意:
1.如果不使用method属性指定请求方法,SpringMVC 控制器默认支持 GET 和 POST 两种方法,即该url的GET请求 和 POST请求都会映射到该方法。
2.当明确指定了 method , 则需要按指定方式请求, 否则会报错。
例如,@RequestMapping(value = "/hello", method = RequestMethod.GET)将请求映射到GET方法,并且路径为"/hello"。
@Controller
public class ExampleController {
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello() {
// 处理GET请求路径为/hello的逻辑
...
}
@RequestMapping(value = "/submit",method = RequestMethod.POST)
public String submit() {
// 处理POST请求路径为/submit的逻辑
...
}
}
3. 指定请求参数的条件--params属性
在@RequestMapping注解中,params属性可以用来指定请求参数的条件。
① param1: 表示请求必须包含名为 param1 的请求参数
@RequestMapping(value = "/example", params = "id")
public String exampleMethod(@RequestParam("id") int id) {
// 方法体
}
使用@RequestMapping注解的params属性指定了请求参数为id。这意味着只有当请求中包含名为id的参数时,该方法才会被调用。在这个例子中,我们我们还使用@RequestParam注解来指定id参数的名称和类型。
② !=param1: 表示请求不能包含名为 param1 的请求参数
@RequestMapping(value = "/example", params = "!=id")
public String exampleMethod() {
// 方法体
}
使用@RequestMapping注解的params属性指定了请求不能包含名为id的参数。这意味着只有当请求中不包含名为id的参数时,该方法才会被调用。
③ param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
@RequestMapping(value = "/example", params = "id!=100")
public String exampleMethod() {
// 方法体
}
使用@RequestMapping注解的params属性指定了请求不能包含名为id的参数等于100。这意味着只有当请求中包含有 bookId 参数,并且值不为100时该方法生效。
④ {"param1=val", "param2"}: 请求必须包含名为 param1 和 param2 的两个请求参数, 且 param1 参数的值必须为 val
@RequestMapping(value = "/example", params = {"id=100","name"})
public String exampleMethod() {
// 方法体
}
4. 其他功能
@RequestMapping注解还支持其他属性,如headers、consumes和produces等,用于进一步限定请求的头信息等。