SpringMVC中的@RequestMapping注解解析
1. RequestMapping 概念
SpringMVC使用@RequestMapping注解为控制器指定可以处理哪些 URL 请求。
在控制器的类定义及方法定义处都可标注 @RequestMapping。
① 标记在类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
② 标记在方法上:提供进一步的细分映射信息。相对于标记在类上的 URL。
若类上未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录 。
作用:DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所 对应的处理方法。
2. RequestMapping源码
package org.springframework.web.bind.annotation; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String[] value() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
参数说明
- value:定义处理方法的请求的 URL 地址。(重点)
- method:定义处理方法的 http method 类型,如 GET、POST 等。(重点)
- params:定义请求的 URL 中必须包含的参数。或者不包含某些参数。(了解)
- headers:定义请求中 Request Headers 必须包含的参数。或者不包含某些参数。(了解)
3. RequestMapping 用法
@RequestMapping 有两种标注方式,一种是标注在类级别上,一种是标注在方法级别上。标注在方法上时,value 表示访问该方法的 URL 地址。标注在类上时,value 相当于一个命名空间,即访问该 Controller 下的任意方法都需要带上这个命名空间。
value属性
@Controller @RequestMapping("/example") public class ExampleController { @RequestMapping public String execute(){ return "example_page"; } @RequestMapping("/todo") public String doSomething(){ return "example_todo_page"; } }
- /example.action:执行的是 execute() 方法。execute() 方法的 @RequestMapping 注解缺省 value 值,在这种情况下,当访问命名空间时默认执行的是这个方法。方法级别上的 @RequestMapping 标注是必须的,否则方法无法被正确访问。
- /example/todo.action执行的是 doSomething() 方法。类级别上的 @RequestMapping 标注不是必须的,在不写的情况下,方法上定义的 URL 都是绝对地址,否则,方法上定义的 URL 都是相对于它所在的 Controller 的。
method属性
指定请求的method类型,可以接受GET,POST,PUT,DELETE等,默认是可以接收GET请求和POST请求
@RequestMapping(value = "/register", method = RequestMethod.GET) public String register1(){ return "example_register_get_page"; } @RequestMapping(value = "/register", method = RequestMethod.POST) public String register2(){ return "example_register_post_page"; }
@RequestMapping({"/test02_01","/test02_02"}) public ModelAndView test02(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("hello", "test01"); modelAndView.setViewName("hello"); return modelAndView; }
- 可以为多个方法映射相同的 URI,不同的 http method 类型,Spring MVC 根据请求的 method 类型是可以区分开这些方法的。当 /example/register.action 是以 GET 的方式提交的时候,Spring MVC 调用 register1() 来处理请求;若是以 POST 的方式提交,则调 register2() 来处理提交的请求。
- method 若是缺省没指定,并不是说它默认只处理 GET 方式的请求,而是它可以处理任何方式的 http method 类型的请求。指定 method 是为了细化映射 ( 缩小处理方法的映射范围 ),在 method 没有指定的情况下,它的映射范围是最大的。
params属性
params:指定request中必须包含某些参数值,才让该方法处理
@RequestMapping(value = "/test04",params = "id") public ModelAndView test04(){ ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("hello", "test04"); modelAndView.setViewName("hello"); return modelAndView; }
请求路径没有id则报错
params还可以指定请求中属性值必须为多少
headers属性
headers 的作用也是用于细化映射。只有当请求的 Request Headers 中包含与 heanders 值相匹配的参数,处理方法才会被调用。
@RequestMapping(value = "/specify", headers = "accept=text/*") public String specify(){ return "example_specify_page"; }
请求的 Request Headers 中 Accept 的值必须匹配 text/* ( 如 text/html ),方法才会被调用。
4. RequestMapping支持Ant风格的通配符
通配符 | 说明 | 示例 |
? | 匹配一个任意字符 | /a/?b 可以匹配/a/ab;/a/cb。但不能匹配/a/acb之类 |
* | 匹配任意长度的字符 | /a/ *b可以匹配/a/cb;/a/acb。但不能匹配/a/cb/vb |
** | 匹配多层路径 | 可以匹配/a/ab;/a/acb;/a/ab/abc/…/… |
到此这篇关于SpringMVC中的@RequestMapping注解解析的文章就介绍到这了,更多相关@RequestMapping注解解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
- SpringMVC中@RequestMapping注解的实现
- 详解SpringMVC中的@RequestMapping注解
- SpringBoot中的@RequestMapping注解的用法示例
- Spring MVC-@RequestMapping注解详解
- SpringMVC @RequestMapping注解属性详细介绍
- SpringMVC @RequestMapping注解应用方法示例讲解
- 详解SpringBoot中@PostMapping注解的用法
- SpringBoot中@GetMapping注解的使用
- SpringMVC @GetMapping注解路径冲突问题解决
- Spring中@RequestMapping、@PostMapping、@GetMapping的实现
相关文章
IDEA新建bootstrap.yml文件不显示叶子图标的问题
这篇文章主要介绍了IDEA新建bootstrap.yml文件不显示叶子图标的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-07-07Java SpringBoot集成文件之如何使用POI导出Word文档
这篇文章主要介绍了Java SpringBoot集成文件之如何使用POI导出Word文档,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下2022-08-08mybatis plus实体类中字段映射mysql中的json格式方式
这篇文章主要介绍了mybatis plus实体类中字段映射mysql中的json格式方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08Java9 Stream Collectors新增功能(小结)
这篇文章主要介绍了Java9 Stream Collectors新增功能(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-12-12springboot利用aspose预览office文件的实现过程
这篇文章主要给大家介绍了关于springboot利用aspose预览office文件的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友可以参考下2021-06-06Java同学找工作最懵圈的问题:到底啥是分布式系统开发经验?(推荐)
这篇文章主要介绍了分布式系统开发经验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-04-04
最新评论