0.总结
@RequestMapping注解主要是用来筛选用户请求,根据用户请求的报文来筛选所需要调用的函数
1. 源码
@Target({ElementType.METHOD, ElementType.TYPE})
@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 {};
}
从源码中我们可以看出,该注解可以修饰方法和类,且该注解有8个参数,name参数为字符串类型,其余的均为数组类型
2.修饰类与修饰注解有什么区别呢?
RequestMapping必须修饰一个方法;不能之修饰类;区别就是前段请求的url路径发生了改变
3.其他几个参数是干嘛的呢
剩余几个参数与具体的请求信息有关,用于筛选处理哪些些请求的
@Controller
public class Distributor {
@RequestMapping(value = "/helloworld",
method=RequestMethod.GET,
params = { "username", "age!=10" },
headers = {"Accept-Language=en-US,zh;q=0.8" })
public String distribute2Success() {
System.out.println("success");
return "success";
}
}
表示请求页面为helloworld,请求方法为get,请求参数包含username,且age不为10,请求头也满足相应条件的请求才可以进入该方法。
3.1 params和headers参数支持简单的表达式
-
param1:
请求必须包含参数param1
-
!param1:
请求不能包含参数param1
-
param1!=value1
请求必须包含参数param1且param1的值不能为value1
-
{“param1=value1”,“param2”}
请求必须包含参数param1和param2且param1的值必须为value1
4 @RequestMapping的url还支持通配符
- ?:任意一个字符
- *:任意多个字符
- **:任意多层路径
例如:
@RequestMapping(value = "/hello/*/world")
public String distribute2Success() {
System.out.println("success");
return "success";
}
5 @RequestMapping注解结合@PathVariable注解可以解析出url中携带的信息
@Controller
public class Distributor {
@RequestMapping(value = "/helloworld/{id}")
public String distribute2Success( @PathVariable(value="id") Integer id) {
System.out.println("id="+id);
return "success";
}
}
这样就可以解析出 “1” 这个信息