第二章 @RequestMapping映射

RequestMapping映射请求注解

@RequestMapping:@RequestMapping("hello") --@RequestMapping("/hello")

  • 就是告诉springmvc 这个方法用来处理什么请求
  • 这个/是可以省略,即使省略了, 也是默认从当前项目下开始
  • 习惯加上比较好/hello

标志处

  • 类定义处:提供初步的请求映射信息,相对于web应用的根目录 一个请求只能处理一个同名方法 可以再类定义处进行标记 从而区分方法处
  • 方法处:提供进一步的细分映射信息,相对于类定义出的url,如果类定义处为标注@RequestMapping。则方法处标记的URL相对于web应用的根目标

DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法

Method:限定请求方式

  • HTTP协议中的所有请求方式:【get】、【post】、put、patch、delete、options
  • method = RequestMethod.POST 只接受这种类型的请求,默认是什么都可以 ,不是规定的方式就会报错405 Request method 'GET' not supported
    4xx 都是客户端错误
  • 以get方式请求
    《a href="springmvc/testMethord">testMethord《/a>
  • 以POST方式请求
    《form action="springmvc/testMethord" method="post">
    《input type="submit" value="submit">
    《/form>

params

RequestMapping映射请求方式

标准的 HTTP 请求报头

  • 图片说明

标准的 HTTP 请求报头

  • @RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求
    @RequestMapping 的 value【重点】、method【重点】、params【了解】 及 heads【了解】
    分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

  • params 和 headers支持简单的表达式:
    param1: 表示请求必须包含名为 param1 的请求参数

    eg:params={"username"}:发送请求的时候必须带上一个名为username的参数,没带就会404
    params={"username=123"} username必须是123
      @RequestMapping(value="/hello",params = {"username"})
      public String myRequest() {
          System.out.println("hello");
          return "hello";
      }
    ?username=
    ?

    图片说明

  • !param1: 表示请求不能包含名为 param1 的请求参数
    param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1

      @RequestMapping(value="/hello",params = {"username"})
      public String myRequest() {
          System.out.println("hello");
          return "hello";
      }
  • params={"!username"} 送请求的时候必须没带上一个名为username的参数,带就会404

    params={"!username","age","pwd"} 
    请求参数必须满足以上规则
    请求的username不能是123,必须有pwd的值,不能有age
  • {"param1=value1", "param2"}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1

  • User-Agen 指定浏览器
    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3970.5 Safari/537.36

consumes

只接受内容类型是那种的请求,规定请求头中的Content-Type

produces

告诉浏览器返回的内容类型是什么,响应头中加上Content-Type:text/html;charset=utf-8

RequestMapping映射请求参数&请求头

URL地址可以写模糊的通配符 Ant风格

  • ?:代替任意一个字符 0个多个都不行 ?不能代替/ 【多个匹配 精确优先】
  • *:能够代替任意多个字符 和一层路径
  • **:能够代替多层路径
  • 带一个和带多个匹配 优先选带一个
    @Controller
    public class MyController {
      @RequestMapping(value="/hello0")
      public String myRequest0() {
          System.out.println("hello0");
          return "hello";
      }
      @RequestMapping(value="/hello?")
      public String myRequest1() {
          System.out.println("hello?");
          return "hello";
      }
    @RequestMapping(value="/hello*") 
      public String myRequest1() {
          System.out.println("hello*");
          return "hello";
      }
    @RequestMapping(value="hello/*/test") //单层
      public String myRequest1() {
          System.out.println("hello/*/test");
          return "hello";
      }
    @RequestMapping(value="/hello/**/test") //多层
      public String myRequest1() {
          System.out.println("hello");
          return "hello";
      }
    //路径上可以有占位符,占位符语法就是可以在任意路径的地方写一个{变量名}
    // /user/admin  /user/cznzcai
    //路径上的占位符只能占一层路径
    @RequestMapping(value="/hello/{id}")
      public String myRequest1(@PathVariable("id")String id) {
          System.out.println(id);
          return "hello";
      }
    }

图片说明

图片说明

RequestMapping_请求参数&请求头【了解】

//了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
@RequestMapping(value="/testParamsAndHeaders",
params= {"username","age!=10"}, headers = { "Accept-Language=en-US,zh;q=0.8" }) 
public String testParamsAndHeaders(){
    System.out.println("testParamsAndHeaders...");
    return "success";
}
全部评论

相关推荐

死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务