2、@RequestMapping注解的用法

时间:2023-03-09 16:47:05
2、@RequestMapping注解的用法

@RequestMapping有如下属性值:

aaarticlea/png;base64,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" alt="" />

1、@RequestMapping来映射URL
    注解 @RequestMapping 可以用在类定义处和方法定义处。
    类定义处:规定初步的请求映射,相对于web应用的根目录;
    方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言;

package com.springmvc.helloworld_1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
@RequestMapping(value="/example")
public class HelloWorld { @RequestMapping("/helloworld")
public String hello(){
System.out.println("hello world"); return "success";
}
}

  上面代码在类定义处指定映射为"/example",在hello()方法处指定为"/helloworld"。那么hello()方法的URL映射地址为:http://localhost:8080/springMVC/example/helloworld

  如果去掉类定义处的@RequestMapping(value="/example"),那么hello()方法的映射地址就变为了:http://localhost:8080/springMVC/helloworld

  还有一个注意的,@RequestMapping的默认属性为value,所以@RequestMapping(value="/example")和@RequestMapping("/example")是等价的。

2、@RequestMapping除了可以指定URL映射外,还可以指定“请求方法、请求参数和请求头”的映射请求
    注解的value、method、params及headers分别指定“请求的URL、请求方法、请求参数及请求头”。它们之间是与的关系,联合使用会使得请求的映射更加精细。
  2.1  method属性可以指定请求的类型,http中规定请求有四种类型:get,post,put,delete。其值在枚举类型RequestMethod中有规定。

    例如:@RequestMapping(value="/helloworld", method=RequestMethod.DELETE) 指定只有DELETE方式的helloworld请求才能够执行该处理方法。

  2.2 params和headers支持简单的表达式:
       ——  params1:表示请求必须包含名为params1的请求参数
       ——  !params1:表示请求不能包含名为params1的请求参数
       ——  params1 != value1:表示请求必须包含名为params1的请求参数,但是其值不能是value1
       ——  {"params1 = value1", "param2"}:表示请求必须包含名为params1和params2两个请求参数,且params1的值必须为value1

  2.3 Ant风格资源地址支持3种通配符:
       —— ?   : 匹配文件名中的一个字符
       —— *   : 匹配文件名中的任意多个字符(至少有一个字符)
       —— ** : 匹配多层路径(至少有一层)

    @RequestMapping支持Ant风格的URL:

     —— /user/create??           匹配/user/createAA、/user/createBB等URL (??匹配任意两个字符)
       —— /user/*/createUser     匹配/user/aaa/createUser、/user/bbb/createUser等URL (*匹配任意字符)
       —— /user/**/createUser   匹配/user/createUser、/user/aaa/bbb/createUser等URL (**匹配任意多层路径)

    注意:其?和*必须要有,如果为空,则不符合    
    
  2.4 @PathVariable 映射URL绑定的占位符
      可以在控制器处理方法的入参中使用 @PathVariable 获取到URL中占位符参数。 URL中的{xxx}占位符可以通过 @PathVariable("xxx") 绑定到操作方法的入参中。

@RequestMapping("/delete/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("id = " + id); return SUCCESS;
}

  

  下面是示例类将上面的知识点做了总结和应用示范:

package com.springmvc.RequestMapping_2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; @Controller
@RequestMapping("/springmvc")
public class RequestMappingTest { private static final String SUCCESS = "success"; /**
* 注解 @RequestMapping 可以用在类定义处和方法定义处
* 1、类定义处:规定初步的请求映射,相对于web应用的根目录
* 2、方法定义处:进一步细分请求映射,相对于类定义处的URL。如果类定义处没有使用该注解,则方法标记的URL相对于根目录而言
*
* 所以,testRequestMappingURL方法对应的URL目录为:/springmvc/testRequestMappingURL
*/
@RequestMapping("/testRequestMappingURL")
public String testRequestMappingURL(){
System.out.println("testRequestMappingURL 方法..."); return SUCCESS;
} /**
* 1、了解:可以指定params和headers参数。
*
* params和headers的值规定了:
* ①、请求参数必须包含param,和view。而且,view的值必须为true
* ②、请求头中必须包含有Accept-Language,而且其值必须为zh-CN,zh;q=0.8
*/
@RequestMapping(value="/testParamsAndHearders",
params={"view=true","param"},
headers={"Accept-Language=zh-CN,zh;q=0.8"})
public String testParamsAndHearders(){
System.out.println("testParamsAndHearders 方法..."); return SUCCESS;
} /**
* 2、Ant风格的占位符。
* —— ? : 匹配文件名中的一个字符
* —— * : 匹配文件名中的任意个字符(至少有一个)
* —— ** : 匹配多层路径(至少有一层)
*/
@RequestMapping(value="/*/testAnt??")
public String testAntPath(){
System.out.println("testAntPath 方法..."); return SUCCESS;
} /**
* 3、通过method指定请求方式必须是POST请求
*/
@RequestMapping(value="/testMethod", method=RequestMethod.POST)
public String testMethod(){
System.out.println("testMethod 方法..."); return SUCCESS;
} /**
* 4、可以使用注解@PathVariable("id")将@RequestMapping中的参数提取出来传递到方法的入参中
*/
@RequestMapping("/delete/{id}")
public String testPathVariable(@PathVariable("id") Integer id){
System.out.println("id = " + id); return SUCCESS;
}
}