@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestMapping注解有六个属性:value、method、params、header、 consumes,produces
1、value:指定请求的实际地址 。
2、method:指定请求的method类型, GET、POST、PUT、DELETE等。
3、params:指定request中必须包含指定的参数值,才让该方法处理。
4、headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
value和method是常用属性,params和headers属性了解即可。
案例:
1、value/method
value值:
①value的值为普通值,如value="helloworld"
②value的值含变量,如value="hellowrold/{id}" 此处使用了{}占位符来传递变量,可以使用@PathVariable注解取值,后面会有例子
当然value的值还可以为Ant风格或者是正则表达式,由于不是很常用,此处略过。
案例1:value值为普通值,method为GET请求方式
index.jsp
<a href="helloWorld">点击我跳转到hello.js页面</a>
HelloWorldController.java
package com.springmvc; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class HelloWorldController { /** * 1. 使用 @RequestMapping 注解来映射请求的 URL * 2. 返回值会通过视图解析器解析为实际的物理视图, 对于 InternalResourceViewResolver 视图解析器, 会做如下的解析: * 通过 prefix + returnVal + 后缀 这样的方式得到实际的物理视图, 然会做转发操作 * * /WEB-INF/views/hello.jsp * * @return */ @RequestMapping(value="helloWorld",method=RequestMethod.GET) public String helloWorld(){ System.out.println("Hello World"); return "hello"; } }
案例2:value的值含变量,method为GET请求方式
index.jsp
<a href="requestMapping/Are you ok">传递参数</a>
HelloWorldController.java
1 package com.springmvc; 2 import org.springframework.stereotype.Controller; 3 import org.springframework.web.bind.annotation.PathVariable; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 @Controller 7 public class HelloWorldController { 8 9 10 @RequestMapping(value="/requestMapping/{info}",method=RequestMethod.GET) 11 public String testRequestMapping(@PathVariable(value="info") String info){ 12 System.out.println("info:"+info); 13 return "hello"; 14 } 15 }
这个例子中用到了@PathVariable注解,该注解可以将URL中的占位符映射到目标方法的参数中。
案例3:value的值为普通值,method为POST请求方式
index.jsp
<form action="springmvc/testPostMethod" method="POST"> <input type="submit" value="post请求" /> </form>
SpringMVCTest.java
1 package com.springmvc; 2 import org.springframework.stereotype.Controller; 3 import org.springframework.web.bind.annotation.PathVariable; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 @RequestMapping("/springmvc") 7 @Controller 8 public class SpringMVCTest { 9 private static String SUCCESS = "success"; 10 11 @RequestMapping(value="testPostMethod",method=RequestMethod.POST) 12 public String testPostMethod(){ 13 System.out.println("POST Request success"); 14 return SUCCESS; 15 } 16 17 }
2、params/headers
params和headers可以更加精确的映射请求,支持简单的表达式。
SpringMVCTest.java
1 package com.springmvc; 2 import org.springframework.stereotype.Controller; 3 import org.springframework.web.bind.annotation.PathVariable; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RequestMethod; 6 @RequestMapping("/springmvc") 7 @Controller 8 public class SpringMVCTest { 9 private static String SUCCESS = "success"; 10 11 /** 12 * 该方法处理同时满足以下条件 13 *1、 params中包含username参数并且age=10 14 *2、headers中Accept-Language参数值为zh-CN,zh;q=0.8 15 *的请求 16 * 17 * @return 18 */ 19 @RequestMapping(value="/testParamsAndHeader",params={"username","age=10"},headers={"Accept-Language=zh-CN,zh;q=0.8"}) 20 public String testParamsAndHeader(){ 21 System.out.println("Test Params and Header"); 22 return SUCCESS; 23 } 24 25 /** 26 * 该方法处理params中包含username参数并且age=10的请求 27 * @return 28 */ 29 @RequestMapping(value="/testParams",params={"username","age=10"}) 30 public String testParams(){ 31 System.out.println("Test Params"); 32 return SUCCESS; 33 } 34 35 36 37 }