@RequestMapping
1.介绍
在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置
<servlet> <servlet-name>servletName</servlet-name> <servlet-class>ServletClass</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletName</servlet-name> <url-pattern>url</url-pattern> </servlet-mapping>
的映射作用一致。让我们先看一下RequestMapping注解类的源码:
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; String[] value() default {}; String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
1)在@Target中有两个属性,分别为 ElementType.METHOD 和 ElementType.TYPE ,也就是说 @RequestMapping 可以在方法和类的声明中使用
2)可以看到注解中的属性除了 name() 返回的字符串,其它的方法均返回数组,也就是可以定义多个属性值,例如 value() 和 path() 都可以同时定义多个字符串值来接收多个URL请求
2.基础
@RequestMapping 用于将任意HTTP 请求映射到控制器方法上。
- @RequestMapping表示共享映射,如果没有指定请求方式,将接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式。
- @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解。
@RequestMapping 注解可以在控制器类上和控制器类中的方法上使用。
在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系。
需要注意的是,控制器方法都应该映射到一个特定的HTTP方法,而不是使用@RequestMapping共享映射。
3.使用
@RestController public class UserController { // 映射到方法上 // localhost:8080/user/login // 此处通常用 @GetMapping("/user/login") 表明GET请求方式的映射,因为login登录只需向服务器获取用户数据。 @RequestMapping("/user/login") public String login() { return "user login"; } // 映射到方法上 // localhost:8080/user/register // 此处通常用 @PostMapping("/user/login") 表明POST请求方式的映射,因为register注册需要向服务器提交用户数据。 @RequestMapping("/user/register") public String register() { return "user register"; } }
如上述代码所示,到 /user/login 的请求会由 login() 方法来处理,而到 /user/register的请求会由 register() 来处理。
下面是一个同时在类和方法上应用了 @RequestMapping 注解的示例,上述代码与如下代码等价:
@RestController // 映射到类上 // localhost:8080/user @RequestMapping("/user") public class UserController { // 映射到方法上 // localhost:8080/user/login // 此处通常用 @GetMapping("/user/login") 表明GET请求方式的映射 @RequestMapping("/login") public String login() { return "user login"; } // 映射到方法上 // localhost:8080/user/register // 此处通常用 @PostMapping("/user/login") 表明POST请求方式的映射 @RequestMapping("/register") public String register() { return "user register"; } }
一般情况下,这样代码更规范,因为user的控制器UserController只对user表进行操作。
4.处理 HTTP 请求
Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
所有的请求默认都会是 HTTP GET 类型的。
为了能降一个请求映射到一个特定的 HTTP 方法,你需要在 @RequestMapping 中使用 method 属性来声明 HTTP 请求所使用的方法类型,也可以使用等价的组合注解。
请求 | 组合注解 | 共享注解 |
---|---|---|
GET | @GetMapping | @RequestMapping(method = RequestMethod.GET) |
POST | @PostMapping | @RequestMapping(method = RequestMethod.POST) |
PUT | @PutMapping | @RequestMapping(method = RequestMethod.PUT) |
DELETE | @DeleteMapping | @RequestMapping(method = RequestMethod.DELETE) |
PATCH | @PatchMapping | @RequestMapping(method = RequestMethod.PATCH) |
需要注意的是,控制器方法都应该映射到一个特定的HTTP方法,即使用组合注解,而不是使用@RequestMapping共享映射。因为组合注解减少了在应用程序上要配置的元数据,并且代码功能更清晰。
@RestController @RequestMapping("/home") public class IndexController { @RequestMapping(method = RequestMethod.GET) String get() { return "Hello from get"; } @RequestMapping(method = RequestMethod.DELETE) String delete() { return "Hello from delete"; } @RequestMapping(method = RequestMethod.POST) String post() { return "Hello from post"; } @RequestMapping(method = RequestMethod.PUT) String put() { return "Hello from put"; } @RequestMapping(method = RequestMethod.PATCH) String patch() { return "Hello from patch"; } }
在上述这段代码中, @RequestMapping 注解中的 method 元素声明了 HTTP 请求的 HTTP 方法的类型。
所有的处理处理方法会处理从这同一个 URL( /home)进来的请求, 但要看指定的 HTTP 方法是什么来决定用哪个方法来处理。
例如,一个 POST 类型的请求 /home 会交给 post() 方法来处理,而一个 DELETE 类型的请求 /home 则会由 delete() 方法来处理。
标签:String,映射,请求,介绍,user,注解,login,RequestMapping From: https://www.cnblogs.com/imreW/p/17413126.html