1、作用
Spring MVC使用@RequestMapping注解为控制器指定处理的URL请求。
在控制器的类、方法上都可以标注:
- 类:提供初步的请求映射信息。相对于WEB应用的根目录。
- 方法:提供进一步的细分映射信息。相对于类定义处的URL。
DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。
package com.xianhuii;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest01 {
private static final String SUCCESS = "success";
/**
* 1、可以修饰类、方法
* 1.1、类:提供初步的请求映射信息。相对于WEB应用的根目录
* 1.2、方法:提供进一步的细分映射信息。相对于类定义处的URL。
* 2、此时的URL为:/springmvc/testRequestMapping
* @return
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping() {
System.out.println("testRequestMapping");
return SUCCESS;
}
}2、源码
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@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 {};
}3、method
package com.xianhuii;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest01 {
private static final String SUCCESS = "success";
/**
* 使用method属性来指定请求方式
* @return
*/
@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
}4、params、heads
params:请求参数。
heads:请求头。
param1:表示请求必须包含名为param1的请求参数 !param1:表示请求不能包含名为param1的请求参数 param1 != value1:表示请求包含名为param1的请求参数,但其值不能为value1 {"param1=value1","param2"}:请求参数必须包含名为param1和param2的两个请求参数,且param1参数的值必须为value1
package com.xianhuii;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest01 {
private static final String SUCCESS = "success";
/**
* 可以使用params、headers来更加精确的映射请求。
* params、headers支持简单的表达式。
* @return
*/
@RequestMapping(path = "/testParamsAndHeaders", params = {"username=xianhuii","age=18"})
public String testParamsAndHeaders() {
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
}5、Ant路径
Ant风格资源地址支持3种匹配符:
- ?:匹配文件名中的一个字符。
- *:匹配文件名中的任意字符。
- **:匹配多层路径。
/user/*/createUser:匹配:/user/aaa/createUser、/user/bbb/createUser等URL /url/**/createUser:匹配:/user/createUser、/user/aaa/createUser、/user/aaa/bbb/createUser等URL /user/createUser??:匹配/user/createUseraa、/user/createUserbb等URL
package com.xianhuii;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest01 {
private static final String SUCCESS = "success";
@RequestMapping("/testAnt/*/abc")
public String testAntPath() {
System.out.println("testAntPath");
return SUCCESS;
}
}
京公网安备 11010502036488号