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

请求的url与映射
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还支持通配符

  • ?:任意一个字符
  • *:任意多个字符
  • **:任意多层路径

例如:

<a href="hello/IloveChina/world">Hello World</a>
@RequestMapping(value = "/hello/*/world")
public String distribute2Success() {
    System.out.println("success");
    return "success";
}

5 @RequestMapping注解结合@PathVariable注解可以解析出url中携带的信息

<a href="helloworld/1">Hello World</a>
@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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值