天天看点

SpringMVC的@RequestMapping注解解析

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.修饰类与修饰注解有什么区别呢?

SpringMVC的@RequestMapping注解解析

RequestMapping必须修饰一个方法;不能之修饰类;区别就是前段请求的url路径发生了改变

3.其他几个参数是干嘛的呢

SpringMVC的@RequestMapping注解解析

剩余几个参数与具体的请求信息有关,用于筛选处理哪些些请求的

@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” 这个信息

6 @RequestMapping中的method参数可以实现RESTful风格的增删改查,详细见下一篇博客https://blog.csdn.net/qq_23937341/article/details/95984915

继续阅读