• SpringMvc(2)RequestMapping注解


    1 、RequestMapping的作用

    @RequestMapping 注解是 Spring MVC 框架中的一个控制器映射注解,用于将请求映射到相应的处理方法上。具体来说,它可以将指定 URL 的请求绑定到一个特定的方法或类上,从而实现对请求的处理和响应。

    2、RequestMapping的出现位置

    在这里插入图片描述
    通过RequestMapping的源码可以看到RequestMapping注解只能出现在类上或者方法上。

    3、类上与方法上结合使用

    比如有一个user控制器,它的路径都包含user,只是具体的模块后边的路径不同,我们可以在类路径上添加上@RequestMapping 注解,然后可以在方法上再添加上该注解。

    package com.cky.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
            @RequestMapping("/login")
            public String login(){
                return "login";
            }
            @RequestMapping("/register")
            public String index(){
                return "register";
            }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    在这里插入图片描述

    前面都要加上/user

    4、RequestMapping注解的value属性

    4.1 value属性的使用

    value属性是该注解最核心的属性,value属性填写的是请求路径,也就是说通过该请求路径与对应的控制器的方法绑定在一起。另外通过源码可以看到value属性是一个字符串数组:
    在这里插入图片描述
    既然是数组,就表示可以提供多个路径,也就是说,在SpringMVC中,多个不同的请求路径可以映射同一个控制器的同一个方法:
    比如:

    package com.cky.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    
    public class Mycontroller {
    @RequestMapping(value = {"/heihei","/haha"})
      public String my(){
          return "heihei";
      }
      @RequestMapping("/")
      public String index(){
        return "index";
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    DOCTYPE html>
    
    
    
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>heiheititle>
    head>
    <body>
    <h1>heiheih1>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    DOCTYPE html>
    
    
    
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>indextitle>
    head>
    <body>
    <h1>首页h1>
    <a th:href="@{/heihei}">嘿嘿请求a>
    <a th:href="@{/haha}">哈哈请求a>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    不同路径,映射到一个方法上。

    4.2 Ant风格的value

    value是可以用来匹配路径的,路径支持模糊匹配,我们把这种模糊匹配称之为Ant风格。关于路径中的通配符包括:
    ● ?,代表任意一个字符
    ● *,代表0到N个任意字符
    ,代表0到N个任意字符,并且路径中可以出现路径分隔符 /
    注意:
    通配符在使用时,左右不能出现字符,只能是 /

    ? 和 * 在匹配时 既不能出现 问号,也不能出现/,而且如果通配符是?时,也不能什么都不填,必须有一个字符。
    注意:/x**z/ 实际上并没有使用通配符 **,本质上还是使用的 *,因为通配符 ** 在使用的时候,左右两边都不能有任何字符,必须是 /。

    只有当** 位于最后时,且左边两边没有字符,才可以匹配/

    4.3 value中的占位符(重点)

    到目前为止,我们的请求路径是这样的格式:uri?name1=value1&name2=value2&name3=value3
    其实除了这种方式,还有另外一种格式的请求路径,格式为:uri/value1/value2/value3,我们将这样的请求路径叫做 RESTful 风格的请求路径。
    RESTful风格的请求路径在现代的开发中使用较多。

    普通的请求路径:http://localhost:8080/springmvc/login?username=admin&password=123&age=20
    RESTful风格的请求路径:http://localhost:8080/springmvc/login/admin/123/20

    如果使用RESTful风格的请求路径,在控制器中应该如何获取请求中的数据呢?可以在value属性中使用占位符,例如:/login/{id}/{username}/{password}

      @RequestMapping(value = "/test/{id}/{password}")
      public String test(@PathVariable("id") int id,@PathVariable("password") int pwd){
        System.out.println(id+" "+pwd);
        return "login";
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    <a th:href="@{/test/123/123456}">测试占位符</a>
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5、RequestMapping注解的method属性

    如果前端发送请求的方式和后端的处理方式不一致时,会出现405错误。在这里插入图片描述
    数组中的每个元素是 RequestMethod,而RequestMethod是一个枚举类型的数据:在这里插入图片描述
    因此如果要求前端发送POST请求,该注解应该这样用:

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(){
        return "success";
    }
    
    • 1
    • 2
    • 3
    • 4

    因此,可以看出,对于RequestMapping注解来说,多一个属性,就相当于多了一个映射的条件,如果value和method属性都有,则表示只有前端发送的请求路径 + 请求方式都满足时才能与控制器上的方法建立映射关系,只要有一个不满足,则无法建立映射关系。例如:@RequestMapping(value="/login", method = RequestMethod.POST) 表示当前端发送的请求路径是 /login,并且发送请求的方式是POST的时候才会建立映射关系。如果前端发送的是get请求,或者前端发送的请求路径不是 /login,则都是无法建立映射的,会出现405错误。

    5.2衍生Mapping

    在SpringMVC中不仅提供了 PostMaping注解,像这样的注解还有四个,包括:
    ● GetMapping:要求前端必须发送get请求
    ● PutMapping:要求前端必须发送put请求
    ● DeleteMapping:要求前端必须发送delete请求
    ● PatchMapping:要求前端必须发送patch请求

    5.3web的请求方式

    前端向服务器发送请求的方式包括哪些?共9种,前5种常用,后面作为了解:
    ● GET:获取资源,只允许读取数据,不影响数据的状态和功能。使用 URL 中传递参数或者在 HTTP 请求的头部使用参数,服务器返回请求的资源。
    ● POST:向服务器提交资源,可能还会改变数据的状态和功能。通过表单等方式提交请求体,服务器接收请求体后,进行数据处理。
    ● PUT:更新资源,用于更新指定的资源上所有可编辑内容。通过请求体发送需要被更新的全部内容,服务器接收数据后,将被更新的资源进行替换或修改。
    ● DELETE:删除资源,用于删除指定的资源。将要被删除的资源标识符放在 URL 中或请求体中。
    ● HEAD:请求服务器返回资源的头部,与 GET 命令类似,但是所有返回的信息都是头部信息,不能包含数据体。主要用于资源检测和缓存控制。
    ● PATCH:部分更改请求。当被请求的资源是可被更改的资源时,请求服务器对该资源进行部分更新,即每次更新一部分。
    ● OPTIONS:请求获得服务器支持的请求方法类型,以及支持的请求头标志。“OPTIONS *”则返回支持全部方法类型的服务器标志。
    ● TRACE:服务器响应输出客户端的 HTTP 请求,主要用于调试和测试。
    ● CONNECT:建立网络连接,通常用于加密 SSL/TLS 连接。

    注意:

    1. 使用超链接以及原生的form表单只能提交get和post请求,put、delete、head请求可以使用发送ajax请求的方式来实现。
    2. 使用超链接发送的是get请求
    3. 使用form表单,如果没有设置method,发送get请求
    4. 使用form表单,设置method=“get”,发送get请求
    5. 使用form表单,设置method=“post”,发送post请求
    6. 使用form表单,设置method=“put/delete/head”,发送get请求。(针对这种情况,可以测试一下)

    6 、RequestMapping注解的params属性

    6.1 params属性的理解

    params属性用来设置通过请求参数来映射请求。
    对于RequestMapping注解来说:
    ● value属性是一个数组,只要满足数组中的任意一个路径,就能映射成功
    ● method属性也是一个数组,只要满足数组中任意一个请求方式,就能映射成功。
    ● params属性也是一个数组,不过要求请求参数必须和params数组中要求的所有参数完全一致后,才能映射成功。
    在这里插入图片描述

    6.2params属性的4种用法

    @RequestMapping(value=“/login”, params={“username”, “password”}) 表示:请求参数中必须包含 username 和 password,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, params={“!username”, “password”}) 表示:请求参数中不能包含username参数,但必须包含password参数,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, params={“username=admin”, “password”}) 表示:请求参数中必须包含username参数,并且参数的值必须是admin,另外也必须包含password参数,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, params={“username!=admin”, “password”}) 表示:请求参数中必须包含username参数,但参数的值不能是admin,另外也必须包含password参数,才能与当前标注的方法进行映射。

    注意:如果前端提交的参数,和后端要求的请求参数不一致,则出现400错误!!!
    HTTP状态码400的原因:请求参数格式不正确而导致的。

    6.3 测试

      @RequestMapping(value="/testParams", params = {"username", "password"})
      public String testParams(){
        return "login";
      }
    
    • 1
    • 2
    • 3
    • 4
    
    <a th:href="@{/testParams(username='admin',password='123')}">测试params属性a>
    
    <a th:href="@{/testParams?username=admin&password=123}">测试params属性a><br>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    7、RequestMapping注解的headers属性

    headers和params原理相同,用法也相同。
    当前端提交的请求头信息和后端要求的请求头信息一致时,才能映射成功。
    请求头信息怎么查看?在chrome浏览器中,F12打开控制台,找到Network,可以查看具体的请求协议和响应协议。在请求协议中可以看到请求头信息,例如:
    在这里插入图片描述

    7.2 headers属性的4种用法

    @RequestMapping(value=“/login”, headers={“Referer”, “Host”}) 表示:请求头信息中必须包含Referer和Host,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, headers={“Referer”, “!Host”}) 表示:请求头信息中必须包含Referer,但不包含Host,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, headers={“Referer=http://localhost:8080/springmvc/”, “Host”}) 表示:请求头信息中必须包含Referer和Host,并且Referer的值必须是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。
    @RequestMapping(value=“/login”, headers={“Referer!=http://localhost:8080/springmvc/”, “Host”}) 表示:请求头信息中必须包含Referer和Host,并且Referer的值不是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。

    注意:如果前端提交的请求头信息,和后端要求的请求头信息不一致,则出现404错误!!!

  • 相关阅读:
    【JMeter】Beanshell介绍
    Hello CTP(一)——期货业务
    无法解析符号 ‘SpringBootApplication’
    基于JSP+MySQL的手机在线销售平设计与实现
    Netty是什么,Netty为什么速度这么快,线程模型分析
    NC7 买卖股票的最好时机(一)
    SpringBoot整合Swagger2
    操作系统之启动过程
    vue3中实现放大镜效果,使用ref获取节点元素
    CGroups
  • 原文地址:https://blog.csdn.net/qq_45906101/article/details/138002142