@RequestMapping注解详解

  • Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些URL请求。
  • 在控制器的类定义及方法定义出都可以标注@RequestMapping
    - 类定义处:提供初步的请求映射信息。相当于 WEB的根目录。例如 :@RequestMapping("/rest")
    public class RestController {}
    为这个 RestController 控制器中的其他方法的映射信息,添加一个根目录,变为/rest/XXXX的形式
    -方发处:提供进一步的细分映射信息。相当于类定义处的URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录
  • DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。

RequestMapping参数的详解

1、Method参数
通过RequestMapp的Method参数可以指明当前这个方法只处理哪种类型的请求。默认情况下是什么请求都可以。RequestMethod有[GET],HEAD,[ POST], PUT, PATCH, DELETE, OPTIONS, TRACE这几种选择。如果发送请求的方式与规定的不一致,会报405错误

 @RequestMapping(value = "/hello02", method = RequestMethod.POST)  # 指定当前方法接收POST的请求
    public String hello02(){
        return "success";
    }

param参数
通过param参数,我们可以指定请求中需要带什么参数,不需要什么参数,这些我们都可以自己指定,如果请求的url跟我们规定的不一致就会报错。param还支持表达式。

  • params={“username”}:发送请求时必须带上一个名为username的参数,没带就会报404错误
  • params={"!username"}:发送请求时不能携带上一个名为username的参数,带了就会报错
  • param={“username=123”, “age!=123”}:前一个参数是指,发送请求时,必须带上一个参数username并且参数名字为123,后一个指发送请求时age不能为123。这个整体是,一个请求必须带上username参数,并且参数的值为123,age参数可带可不带,如果带了值一定不能是123

headers参数
可以指定请求头中的参数,比如:指定User-Agent的值,可以指定那个浏览器可以访问。例如:@RequestMapping(value = “/hello07”, headers = {“User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0”}),只能通过火狐浏览器访问。

RequestMapping的模糊匹配
?:匹配一个字符,多个或者0个都不行,只能是一个字符的匹配。
比如下方的,可以再浏览器中输入:localhost:8080/hello* 在加一个任意字符就可以访问这个方法 ,输入 hello1就可以访问,但是输入hello124就不行了

 @RequestMapping("/hello*")
    public String hello3(){
        System.out.println("hello03............");
        return "success";
    }

精准和多个匹配情况下,精准的优先,下方的都可以匹配hello01,但是以第一个精准的优先。

@RequestMapping("/hello01")
    public String hello01(){
        System.out.println("hello01.........");
        return "success";
    }

    @RequestMapping("/hello0?")
    public String hello02(){
        System.out.println("hello02.........");
        return "success";
    }

*:可以匹配一层路径,业可以匹配任意字符

@RequestMapping("/*")  // 可以通过 /path  访问,但是只能是一层路径,不能是多层,如果是/a/b这种就不能访问
    public String Hello04(){
        System.out.println("hello04.............");
        return "success";
    }
    
@RequestMapping("/hello*")  //这个情况下,可以使用 /hello + 任意字符,可以是一个也可以是多个或者是0个。
    public String hello3(){
        System.out.println("hello03............");
        return "success";
    }

** :可以匹配多层路径,如果再多个匹配情况下,精确的url优先。

  @RequestMapping("/hello/**")  // 这个情况下,可以匹配一层路径,或者多层,例如:/hello/a/a,这样的也可以访问。
    public String hello06(){
        System.out.println(".................hello05");
        return "success";
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值