@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标识一个方法:设置映射请求请求路径的具体信息
如果有请求路径的初始信息,则先设置请求路径的初始信息才能设置请求路径的具体信息。
比如,想从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"; } }结果就是跳转失败
如果修改跳转路径为/hello/testRequestMapping,即可成功
<a th:href="@{/hello/testRequestMapping}">访问welcome页面 </a> @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"; } }两个超连接都可访问成功
@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方式访问: