SpringMVC的注解@RequestMapping属性及使用

作者:把苹果咬哭的测试笔记 时间:2022-12-31 02:03:00 

SpringMVC注解@RequestMapping

在之前的 hello world 示例中,用到了 @RequestMapping 注解,它的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。

当 SpringMVC 接受到指定的请求,就会到这个映射关系中找到对应控制器方法来处理这个请求。

一、@RequestMapping 注解的位置

在示例中,注解是用在了方法上,除此之外,还可以用在类上。

1. 作用在方法

@Controller
public class RequestMappingController {

@RequestMapping("/testRequestMapping")
   public String testRequestMapping(){
       return "success";
   }
}

此时请求映射所映射的请求的请求路径为:/testRequestMapping。

2. 作用在类

@Controller
@RequestMapping("/test")
public class RequestMappingController {

//此时请求映射所映射的请求的请求路径为:/test/testRequestMapping
   @RequestMapping("/testRequestMapping")
   public String testRequestMapping(){
       return "success";
   }
}

此时请求映射所映射的请求的请求路径为:/test/testRequestMapping。

作用在类上以后会经常用到,比如有2个模块:用户和订单,那么每个模块下都会有自己的列表接口 /list。

为了更好的通过名称区分出不同模块,可以给两个类上加上注解,使其最终路径为/user/list、/order/list。

当然,你也可以不用类的注解,直接在方法的注解上做区分,比如/userList和/orderList。

总之,一个请求只能有一个控制器来处理,如果你两个不同的控制器方法,都使用/list,那么请求过来的时候就不知道该找哪个处理,会报错。

二、@RequestMapping 注解的 value 属性

value 属性通过请求的请求地址匹配请求映射,是必须设置的,否则请求地址匹配不到映射。

另外,value 属性也是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址的请求。

@Controller
public class RequestMappingController {

@RequestMapping(
           value = {"/test1", "/test2"}
   )
   public String testRequestMapping(){
       return "success";
   }
}

这里不管请求地址是/test1还是/test2,都可以找到控制器 testRequestMapping(),返回 success.html 。

三、@RequestMapping 注解的 method 属性

method属性通过请求的请求方式,比如 get 或 post ,来匹配请求映射。

method 属性是一个 RequestMethod 类型的数组,表示该请求映射能够匹配多种请求方式的请求。

若当前请求的请求地址满足请求映射的 value 属性,但是请求方式不满足 method 属性,比如控制器是设置是 GET 请求方法,但是请求发送是 post:

@Controller
public class RequestMappingController {

@RequestMapping(
           value = {"/test1"},
           method = {RequestMethod.GET}
   )
   public String testRequestMapping(){
       return "success";
   }
}

index.html 添加 post 发送:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
   <meta charset="UTF-8">
   <title>首页</title>
</head>
<body>
   <h1>Hello World</h1>
   <a th:href="@{/target}" rel="external nofollow" >访问目标页面 target.html </a>
   <br>
   <a th:href="@{/test1}" rel="external nofollow" >测试@RequestMapping的value属性-->/test1</a><br>
   <a th:href="@{/test2}" rel="external nofollow" >测试@RequestMapping的value属性-->/test2</a><br>
   <a th:href="@{/test}" rel="external nofollow" >测试@RequestMapping的method属性-->/test</a><br>
   <form th:action="@{/test1}" method="post">
       <input type="submit">
   </form>
</body>
</html>

点击 submit 按钮,浏览器报错405:Request method 'POST' not supported。

SpringMVC的注解@RequestMapping属性及使用

如果继续添加 post 方法支持,则可以正常访问:

@Controller
public class RequestMappingController {

@RequestMapping(
           value = {"/test1"},
           method = {RequestMethod.GET, RequestMethod.POST}
   )
   public String testRequestMapping(){
       return "success";
   }
}

@RequestMapping 结合请求方式的派生注解

对于处理指定请求方式的控制器方法,SpringMVC 中提供了 @RequestMapping 的派生注解。

  • @GetMapping:处理 get 请求的映射

  • @PostMapping:处理 post 请求的映射

  • @PutMapping:处理 put 请求的映射

  • @DeleteMapping:处理 delete 请求的映射

使用这种注解,就不需要设置 method 属性了。

@GetMapping("/test3")
   public String testGetMapping() {
       return "success";
   }

四、@RequestMapping 注解的 params 属性

最常用的还是上面说的 value 和 method 属性,其他的仅做了解。

params 属性通过请求的请求参数匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系:

param:要求请求映射所匹配的请求必须携带 param 请求参数

!param:要求请求映射所匹配的请求必须不能携带 param 请求参数

param=value:要求请求映射所匹配的请求必须携带 param 请求参数且 param=value

param!=value:要求请求映射所匹配的请求必须携带 param 请求参数但是 param!=value

举个例子:

@RequestMapping(
           value = {"/test1"},
           method = {RequestMethod.GET, RequestMethod.POST},
           params = {"username", "password!=123456"}
   )
   public String testRequestMapping(){
       return "success";
   }

这里params = {"username", "password!=123456"}的意思就是,请求中必须带有参数username和password,且password参数的值必须不等于123456。

五、@RequestMapping 注解的 headers 属性

同样作个了解。

headers 属性通过请求的请求头信息匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:

  • header:要求请求映射所匹配的请求必须携带header请求头信息

  • !header:要求请求映射所匹配的请求必须不能携带header请求头信息

  • header=value:要求请求映射所匹配的请求必须携带header请求头信息且header=value

  • header!=value:要求请求映射所匹配的请求必须携带header请求头信息且header!=value

若当前请求满足 @RequestMapping 注解的 value 和 method 属性,但是不满足 header 属性,此时页面显示404错误,即资源未找到。

@RequestMapping(
           value = {"/test1"},
           method = {RequestMethod.GET, RequestMethod.POST},
           params = {"username", "password!=123456"},
           headers = {"Host=localhost:8081"}  // 这里端口变成8081
   )
   public String testRequestMapping(){
       return "success";
   }

我本地端口是 8080,现在去请求页面,会报错。

SpringMVC的注解@RequestMapping属性及使用

感谢《尚硅谷》的学习资源。

来源:https://blog.csdn.net/wessonlan/article/details/124812958

标签:SpringMVC,注解,@RequestMapping
0
投稿

猜你喜欢

  • Java关键字之this用法详解

    2022-03-23 21:43:22
  • Java中final修饰的方法是否可以被重写示例详解

    2022-02-25 13:35:40
  • springcloud之自定义简易消费服务组件

    2022-01-29 00:18:24
  • android 引导界面的实现方法

    2023-08-07 04:58:11
  • C#使用WebClient实现上传下载

    2022-04-22 21:46:31
  • spring-boot中使用spring-boot-devtools的实现代码

    2021-10-09 13:31:32
  • spring cloud gateway中如何读取请求参数

    2021-08-19 16:19:02
  • SpringBoot AOP使用笔记

    2023-12-09 13:25:50
  • checkpoint 机制具体实现示例详解

    2023-03-31 21:42:01
  • C#索引属性用法实例分析

    2023-02-02 14:15:19
  • Spring Boot2.3 新特性分层JAR的使用

    2021-08-03 12:55:50
  • android基于SwipeRefreshLayout实现类QQ的侧滑删除

    2023-05-22 14:49:19
  • Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)

    2023-10-16 12:16:14
  • Java并发系列之AbstractQueuedSynchronizer源码分析(共享模式)

    2022-06-03 13:39:58
  • java如何给对象按照字符串属性进行排序

    2022-05-23 02:17:14
  • Java基于动态规划法实现求最长公共子序列及最长公共子字符串示例

    2021-10-11 22:20:17
  • Fluent Mybatis零xml配置实现复杂嵌套查询

    2022-02-03 19:34:32
  • Java实现在线考试系统与设计(学生功能)

    2021-09-20 11:41:33
  • Java%(取模运算)全面讲解

    2022-03-02 06:11:34
  • Java并发编程之ReadWriteLock读写锁的操作方法

    2023-12-07 20:08:37
  • asp之家 软件编程 m.aspxhome.com