SpringMVC笔记第二篇-注解的作用

					@RequestMapping注解的作用

@RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序,在web.xml中配置了访问地址之后,它们之间就有一个访问映射关系。

  1. value 属性:用于配置方法对应的访问地址.
  • @RequestMapping 可以配置一个请求地址给当前方法
  • / 表示请求地址为: http://ip:port/工程路径/ 映射 到web目录
  • /hello 表示地址为: http://ip:port/工程路径/hello

@RequestMapping(value = “/hello”)

  1. params属性: 是要求此请求的参数匹配

params=“username”
表示请求地址必须带有username参数

params=“username=abc”
表示请求参数中必须要有username,而且值还必须是abc

params=“username!=abc”
表示: 1、请求参数中不能有username参数。
2、有username参数,但值不能等于abc

params="!username"
表示 请求地址不能带有username参数

params= {“username!=abc”,"!password"}
params可以有多个值,每个值之间是&&关系,
必须同时满足所有的要求才能允许访问。
以上条件表示要求:
请求地址中能有username参数 || username参数值不能等于 abc &&不能有password参数

代码示例:

@Controller
public class ParamController {
    /**
     * params = "username" 表示必须要有username请求参数
     * @return
     */
    @RequestMapping(value="/param1",params = "username")
    public String param1(){
        System.out.println("param1 调用了");
        return "ok";
    }


    /**
     * params = "username=wzg168" 表示必须要有请求参数username而且值必须还要是wzg168
     * @return
     */
    @RequestMapping(value="/param2",params = "username=wzg168")
    public String param2(){
        System.out.println("param2 调用了");
        return "ok";
    }

    /**
     * params = "username!=abc168" 表示两种情况: <br/>
     *  1 username参数没有 <br/>
     *  2 如果有username参数,值不能是abc168 <br/>
     * @return
     */
    @RequestMapping(value="/param3",params = "username!=abc168")
    public String param3(){
        System.out.println("param3 调用了");
        return "ok";
    }
    /**
     * params = "!username" 表示请求中不能有参数username 
     * @return
     */
    @RequestMapping(value="/param4",params = "!username")
    public String param4(){
        System.out.println("param4 调用了");
        return "ok";
    }

    /**
     * params = {"username","password=123456"} 表示两个条件都要同时满足
     * 必须要有username参数,还要有password参数.密码值还是123456
     *
     * @return
     */
    @RequestMapping(value="/param5",params = {"username","password=123456"})
    public String param5(){
        System.out.println("param5 调用了");
        return "ok";
    }

}
  1. headers 属性是:要求请求头匹配 , 它的使用规则跟 params 一样.

代码示例:

/**
 * headers = "User-Agent" 要求请求头中要有User-Agent请求头 <br/>
 * User-Agent是 浏览器的信息 <br/>
 * @return
 */
@RequestMapping(value = "/headers1",headers = "User-Agent")
public String headers1(){
    System.out.println("headers1 方法调用了");
    return "ok";
}


/**
 * headers = "User-Agent" 要求请求头中要有User-Agent请求头,且请求头中的信息一定要一致才可以。
 * 一般不同浏览器不用版本请求头中的信息都有区别。
 * User-Agent是 浏览器的信息 <br/>
 * @return
 */
@RequestMapping(value = "/headers2",headers = "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36")
public String headers2(){
    System.out.println("headers2 方法调用了");
    return "ok";
}
  1. method 属性:可以对当前方法的请求方式进行限定 . 不写表示不限定.

GET请求演示:

/**
 * method = RequestMethod.GET 可以限定请求的方式 .  <br/>
 * RequestMethod.GET 表示只能是GET请求
 */
@RequestMapping(value="/getMethod" , method = RequestMethod.GET)
public String getMethod(){
    System.out.println("GET请求");
    return "ok";
}

POST请求演示:

/**
 * method = RequestMethod.POST 可以限定请求的方式 .  
 * RequestMethod.POST 表示只能是 POST 请求
 */
@RequestMapping(value="/postMethod" , method = RequestMethod.POST)
public String postMethod(){
    System.out.println(" post 请求");
    return "ok";
}
  1. @RequestMapping标注在Controller类上

        一般在开发的时候 , 一个模块对应一个 Controller 控制器,
     所以需要在类上添加路径和方法上都添加路径,
     这样就能够唯一定位到该方法!!!
     ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020082418454664.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80OTkyMDMxOA==,size_16,color_FFFFFF,t_70#pic_center)对比示例:
    

在这里插入图片描述
6. 配符在@RequestMapping中的使用(了解内容)

这种通配符的方式 又叫 Ant 模式匹配

1、绝对匹配
	@RequestMapping(value = "/headers1")

以上的路径,表示请求地址必须为: http://ip:port/工程路径/headers1 才会调用方法

2、? 问号 匹配资源路径
? 问号表示一个任意字符,比如匹配fu[0-9a-zA-Z]

代码示例:

/**
 * value="/fu?" 中的问号,表示任意一个字符,只能加一个!!!
 * @return
 */
@RequestMapping(value="/fu?")
public String fun1(){
    System.out.println("fun1()  /fu?  方法被调用了");
    return "ok";
}

** * 星号 :可以匹配任意个字符 **

/**
 * value="/fu*" 路径中的星表示任意多个字符,多少个都可以!!! 
 * @return
 */
@RequestMapping(value="/fu*")
public String fun2(){
    System.out.println("fun2()  /fu*  方法被调用了");
    return "ok";
}

注:当一个路径同时匹配多个规则的时候,调用方法的优先顺序是:
绝对匹配 —>>>> ?问号匹配 ---->>>> *星号匹配

4、? 问号 : 表示 匹配一个字符的一层目录,都是一个!!!

/**
 * value = "/?/fun" 路径中的?问号,表示一个字符的一层目录 <br/>
 * @return
 */
@RequestMapping(value = "/?/fun")
public String fun3(){
    System.out.println("fun3() /?/fun   方法被调用了! ");
    return "ok";
}

5. * 星号:表示 匹配任意多个字加粗样式符的一层目录。

/**
 * value = "/*/fun" 路径中的* 表示,表示任意个字符的一层目录 <br/>
 * @return
 */
@RequestMapping(value = "/*/fun")
public String fun4(){
    System.out.println("fun4()   /*/fun  方法被调用了! ");
    return "ok";
}

6. ** 表示任意个字符的任何多层目录

/**
 * value = "/**/fun" 路径中的** 两个星号 表示,
 * 表示任意个字符的任意层目录 
 * @return
 */
@RequestMapping(value = "/**/fun")
public String fun5(){
    System.out.println("fun5()   /**/fun  方法被调用了! ");
    return "ok";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值