博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC @RequestMapping注解详解
阅读量:6071 次
发布时间:2019-06-20

本文共 3296 字,大约阅读时间需要 10 分钟。

@RequestMapping 参数说明

  value:定义处理方法的请求的 URL 地址。(重点)

  method:定义处理方法的 http method 类型,如 GET、POST 等。(重点)

  params:定义请求的 URL 中必须包含的参数。或者不包含某些参数。(了解)

  headers:定义请求中 Request Headers 必须包含的参数。或者不包含某些参数。(了解)

 

 

@RequestMapping 的用法

  @RequestMapping 有两种标注方式,一种是标注在类级别上,一种是标注在方法级别上。标注在方法上时,value 表示访问该方法的 URL 地址。标注在类上时,value 相当于一个命名空间,即访问该 Controller 下的任意方法都需要带上这个命名空间。例如:

Java代码

1 @Controller 2 @RequestMapping("/example") 3 public class ExampleController { 4  5     @RequestMapping 6     public String execute(){ 7         return "example_page"; 8     } 9     10     @RequestMapping("/todo")11     public String doSomething(){12         return "example_todo_page";13     }14     15 }

  1:/example.action:执行的是 execute() 方法。execute() 方法的 @RequestMapping 注解缺省 value 值,在这种情况下,当访问命名空间时默认执行的是这个方法。方法级别上的 @RequestMapping 标注是必须的,否则方法无法被正确访问。

  2:/example/todo.action执行的是 doSomething() 方法。类级别上的 @RequestMapping 标注不是必须的,在不写的情况下,方法上定义的 URL 都是绝对地址,否则,方法上定义的 URL 都是相对于它所在的 Controller 的。

 

@RequestMapping(method):指定页面请求方式

1 @RequestMapping(value = "/register", method = RequestMethod.GET)2 public String register(){3     return "example_register_page";4 }

  method 的值一旦指定,那么,处理方法就只对指定的 http method 类型的请求进行处理。 这里方法/register只能使用get请求,使用post请求无法访问

1 @RequestMapping(value = "/register", method = RequestMethod.GET)2 public String register1(){3     return "example_register_get_page";4 }5 6 @RequestMapping(value = "/register", method = RequestMethod.POST)7 public String register2(){8     return "example_register_post_page";9 }

  可以为多个方法映射相同的 URI,不同的 http method 类型,Spring MVC 根据请求的 method 类型是可以区分开这些方法的。当 /example/register.action 是以 GET 的方式提交的时候,Spring MVC 调用 register1() 来处理请求;若是以 POST 的方式提交,则调 register2() 来处理提交的请求。

  method 若是缺省没指定,并不是说它默认只处理 GET 方式的请求,而是它可以处理任何方式的 http method 类型的请求。指定 method 是为了细化映射 ( 缩小处理方法的映射范围 ),在 method 没有指定的情况下,它的映射范围是最大的。

 

@RequestMapping(params)

  与 method 相类似,作用是为了细化映射。只有当 URL 中包含与 params 值相匹配的参数的请求,处理方法才会被调用。

1 @RequestMapping(value = "/find", params = "target") 2 public String find1(){ 3     return "example_find1_page"; 4 } 5  6 @RequestMapping(value = "/find", params = "!target") 7 public String find2(){ 8     return "example_find2_page"; 9 }10 11 @RequestMapping(value = "/search", params = "target=product")12 public String search1(){13     return "example_search1_page";14 }15 16 @RequestMapping(value = "/search", params = "target!=product")17 public String search2(){18     return "example_search2_page";19 }

  find1():请求的 URL 中必须要有 target 参数,才能够到达此方法。如 /example/find.action?target 或 /example/find.action?target=x 等

  find2():请求的 URL 中必须不能有 target 参数,才能够到达此方法。如 /example/find.action 或 /example/find.action?q=x 等

  search1():请求的 URL 中必须要有 target=product 参数,才能够到达此方法。如 /example/search.action?target=product 等

  search2():请求的 URL 中必须不能有 target=product 参数,才能够到达此方法。如 /example/search.action?target=article 等

 

 

@RequestMapping(headers)

  headers 的作用也是用于细化映射。只有当请求的 Request Headers 中包含与 heanders 值相匹配的参数,处理方法才会被调用。 

 

1 @RequestMapping(value = "/specify", headers = "accept=text/*")2 public String specify(){3     return "example_specify_page";4 }

 

  请求的 Request Headers 中 Accept 的值必须匹配 text/* ( 如 text/html ),方法才会被调用。

 

@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/…/…

 

转载地址:http://rzigx.baihongyu.com/

你可能感兴趣的文章
树状数组
查看>>
对象练习
查看>>
每日练习
查看>>
[原]Unity3D深入浅出 - 认识开发环境中的Component(组件)菜单
查看>>
回调函数
查看>>
Android开发中常见的内存泄露案例以及解决方法总结
查看>>
使用Java+Kotlin双语言的LeetCode刷题之路(一)
查看>>
jdk环境变量设置
查看>>
深入理解Java虚拟机读书笔记(一)- java内存区域和垃圾收集
查看>>
ie7下的javascript兼容
查看>>
几种常见的I2S数据格式(转)
查看>>
关于消息队列的使用
查看>>
对象的创建与销毁
查看>>
case功能菜单选项
查看>>
HP ILO2 使用详细教程
查看>>
Scout YYF I (概率+矩阵快速幂)
查看>>
Reverse and Compare(DP)
查看>>
1503 猪和回文(DP)
查看>>
345. 反转字符串中的元音字母
查看>>
在浏览器输入URL后发生了什么?
查看>>