【SpringMVC】@RequestMapping注解

@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注解的功能

@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。

SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。
该注解可以标识在类和方法上。

@RequestMapping注解的位置

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息

@RequestMapping标识一个方法:设置映射请求请求路径的具体信息

如果有请求路径的初始信息,则先设置请求路径的初始信息才能设置请求路径的具体信息。

比如,想从index的超链接跳转到welcome页面:

index.html

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>首页</h1> <a th:href="@{/testRequestMapping}">访问welcome页面 </a> </body> </html>

index的超链接跳转的路径是/testRequestMapping

welcome.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>welcome</title> </head> <body> <h1>Welcome to My Blog</h1> </body> </html>

在welcome的控制器的类和方法上都加上RequestMapping注解

@Controller @RequestMapping("/hello") public class RequestMappingController { @RequestMapping("/testRequestMapping") public String welcome(){ return "welcome"; } }

结果就是跳转失败

image

如果修改跳转路径为/hello/testRequestMapping,即可成功

<a th:href="@{/hello/testRequestMapping}">访问welcome页面 </a>

image

@RequestMapping注解的value属性

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射

@RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求

@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射

index.html

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <h1>首页</h1> <a th:href="@{/testRequestMapping}">通过/testRequestMapping访问welcome页面 </a> <br> <a th:href="@{/test}">通过/test访问welcome页面 </a> </body> </html> @Controller public class RequestMappingController { @RequestMapping(value = {"/testRequestMapping","/test"}) public String welcome(){ return "welcome"; } }

image

两个超连接都可访问成功

@RequestMapping注解的method属性

@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射

@RequestMapping注解的method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求

若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错405:Request method 'POST' not supported

index.html

<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首页</title> </head> <body> <form th:action="@{/test}" method="post"> <input type="submit" value="以post方式提交"> </form> <br> <form th:action="@{/test}" method="get"> <input type="submit" value="以get方式提交"> </form> </body> </html>

welcome.html的控制器

@RequestMapping(value = "/test", method = {RequestMethod.GET}) public String welcome(){ return "welcome"; }

如果不设置控制器的method,则index的post和get两种方式都可以访问welcome.html

如果设置控制器的method为RequestMethod.GET,则只能用get方式访问

以post方式访问:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwxgj.html