SpringMVC中@RequestMapping注解的实现

 更新时间:2024年01月03日 15:08:37   作者:thdwx  
RequestMapping是一个用来处理请求地址映射的注解,本文主要介绍了SpringMVC中@RequestMapping注解的实现,具有一定的参考价值,感兴趣的可以了解一下

0. 多个方法对应同一个请求

@RequestMapping("/")
    public String toIndex(){
        return "index";
    }
    
    @RequestMapping("/")
    public String toIndex2(){
        return "index";
    }

这种情况是不允许的,会报错。

在这里插入图片描述

1. 注解的功能

@RequestMapping注解的作用就是将请求地址和处理请求的控制器方法关联起来,建立映射关系。
SpringMVC接收到指定的请求,就会找到映射关系中对应的控制器方法来处理这个请求。

2. 注解位置

@RequestMapping注解既可以放在方法上,也可以放在类上。
标识方法:设置映射的请求路径的具体信息。
标识类:设置映射的请求路径的初始信息。
例如:如果有如下代码

@RequestMapping("/hello")
@Controller
public class TestRequestMapping {
    @RequestMapping("/target")
    public String toTarget(){
        return "target";
    }
}

那么在访问target之前必须加上/hello,否则访问不到target,也就是url为 http://localhost:8080/项目上下文路径/hello/target

在这里插入图片描述

在这里插入图片描述

3. value属性

  • value属性用于配置映射到控制器方法的请求路径。
  • value属性是一个字符串数组,表示该控制器方法可以匹配多个请求地址。如果指定了多个value值,那么请求时满足其中之一即可。
  • value属性必须设置。
    @RequestMapping({"/test1","/test2"})
    public String toTestValue(){
        return "testValue";
    }
<a th:href="@{/test1}" rel="external nofollow" >一个控制器方法匹配多个value测试1</a><br>
<a th:href="@{/test2}" rel="external nofollow" >一个控制器方法匹配多个value测试2</a><br>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. method属性

  • 通过请求方式映射控制器方法。
  • method属性是一个RequestMethod类型数组,表示该方法可以匹配多个请求方式。如果指定了多个method值,那么请求时满足其中之一即可。
  • 目前浏览器只能支持GET和POST方式。
  • 在提交表单时,如果指定了GET和POST以外的请求方式,则会默认以GET请求发送。
  • 如果请求地址匹配,但是请求方式不匹配,则会返回405,请求方式不允许。
  • 如果不指定请求方式,则默认可以处理所有请求方式。
  • 若要发送PUT和DELETE请求,则需通过spring提供的过滤器HiddenHttpMethodFilter。
@RequestMapping(value="/test3",method=RequestMethod.POST)
    public String toTestMethod(){
        return "testMethod";
    }
<a th:href="@{/test3}" rel="external nofollow" >method允许POST请求测试</a><br>
<form method="POST" th:action="@{/test3}">
    username<input name="username" type="text" /><br>
    <input type="submit" value="提交" /><br>
</form>
<form method="DELETE" th:action="@{/test3}">
    username<input name="username" type="text" /><br>
    <input type="submit" value="提交" /><br>
</form>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5. params属性

  • 通过请求参数映射控制器方法。
  • params属性是一个字符串数组,可以通过四种表达式设置请求参数和控制器映射的关系。如果指定了多个请求参数,那么在请求时需要全部满足。
    • “param”:要求请求参数必须携带名为param的参数,参数值可以任意。
    • “!param”:要求请求参数中不能含有名为param的参数。
    • “param=value”:要求请求参数必须含有param且值为value。
    • “param!=value”:要求请求参数必须含有param且值不为value。
  • 如果请求匹配了value和method,但是没有匹配params,会返回400状态码。
    /*这个注解表示请求参数要满足如下要求
    1.要有username1,值任意
    2.不能有username2
    3.要有username3,且值为jack
    4.要有username4,且值不能为jack
    在写键值对时,如果value为字符串类型,不需要使用单引号括起来,否则会出错
     */
    @RequestMapping(value="/test4",params={"username1","!username2","username3=jack","username4!=jack"})
    public String toTestParams(){
        return "testParams";
    }
<!--使用?可以连接请求参数,但是会标红,所以可以使用括号来表示请求参数-->
<a th:href="@{/test4(username3='jack',username4='asd')}" rel="external nofollow" >Params没有username1测试</a><br>
<a th:href="@{/test4(username1='asd',username2='qw',username3='jack',username4='qew')}" rel="external nofollow" >Params有username2测试</a><br>
<a th:href="@{/test4(username1='dg',username3='asd',username4='oih')}" rel="external nofollow" >Params有username3但值不为jack测试</a><br>
<a th:href="@{/test4(username1='ih',username3='jack',username4='jack')}" rel="external nofollow" >Params有username4但值为jack测试</a><br>
<a th:href="@{/test4(username1='asd',username3='jack',username4='xcv')}" rel="external nofollow" >Params参数满足条件测试</a><br>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. headers属性

  • 通过请求头信息来匹配控制器方法。
  • headers属性是一个字符串数组,可以通过四种表达式设置请求头信息和控制器的匹配关系。如果指定了多个headers值,需要全部满足。
    • “header”:要求请求头中必须有header,值任意。
    • “!header”:要求请求头中不能含有名为header的参数。
    • “header=value”:要求请求头必须含有header且值为value。
    • “header!=value”:要求请求头必须含有header且值不为value。
  • 如果请求满足了value、method和params,但没有满足headers属性,那么就会返回404状态码。
    @RequestMapping(value="/test5",headers = {"Host=localhost:8080","Accept-Encoding!=gzip, deflate, br"})
    public String toTestHeaders(){
        return "testHeaders";
    }
<a th:href="@{/test5}" rel="external nofollow" >Headers不满足Accept-Encoding条件</a><br>

在这里插入图片描述

修改headers属性后,可以使条件满足:

    @RequestMapping(value="/test5",headers = {"Host=localhost:8080","Accept-Encoding=gzip, deflate, br"})
    public String toTestHeaders(){
        return "testHeaders";
    }

在这里插入图片描述

7. ant风格的路径

  • ?:表示任意单个字符。
  • *:表示任意0个或多个字符。
  • **:表示任意的一层或多层目录。注意在使用时,两个星号必须位于独立的一层目录内,例如前缀路径/**/后缀路径,前缀和后缀可以没有,但是两个星号前后或中间不能有任何内容。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

8. 路径中的占位符

SpringMVC路径中的占位符常用于RESTful风格中,它允许将参数作为路径的一部分发送给服务器,而不是以?连接在URL后。该方式传递的参数只能通过@PathVariable注解的value属性中的同名变量获得参数值。

    //大括号表示占位符
    @RequestMapping("/test6/{id}/{username}")
    public String toTest(@PathVariable("id")Integer id,@PathVariable("username")String username){
        System.out.println("id = "+id+"  "+"username = "+username);
        return "test";
    }

在这里插入图片描述

到此这篇关于SpringMVC中@RequestMapping注解的实现的文章就介绍到这了,更多相关SpringMVC @RequestMapping注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 分布式医疗挂号系统EasyExcel导入导出数据字典的使用

    分布式医疗挂号系统EasyExcel导入导出数据字典的使用

    这篇文章主要为大家介绍了分布式医疗挂号系统EasyExcel导入导出数据字典的使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Mybatis Plus LambdaQueryWrapper的具体用法

    Mybatis Plus LambdaQueryWrapper的具体用法

    Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了SQL注入的风险,感兴趣的可以了解一下
    2023-11-11
  • idea工具配置隐藏文件及文件夹方式

    idea工具配置隐藏文件及文件夹方式

    这篇文章主要介绍了idea工具配置隐藏文件及文件夹方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java实现Twitter的分布式自增ID算法snowflake

    Java实现Twitter的分布式自增ID算法snowflake

    这篇文章主要介绍了Java实现Twitter的分布式自增ID算法snowflake,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mybatis教程之延迟加载详解

    mybatis教程之延迟加载详解

    本篇文章主要介绍了mybatis教程之延迟加载详解。详细介绍了延迟加载的意义和用法实现,有兴趣的可以了解一下
    2017-05-05
  • java中Lambda常用场景代码实例

    java中Lambda常用场景代码实例

    这篇文章主要介绍了java中Lambda常用场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 关于Java日期工具类的编写

    关于Java日期工具类的编写

    这篇文章主要介绍了关于Java日期工具类的编写,在Java开发中,经常会遇到处理日期相关的数据,那么今天我们来自己写一个工具类,文中有详细的实例代码以及实现思路,需要的朋友可以参考下
    2023-05-05
  • 用JAVA实现杨辉三角实例

    用JAVA实现杨辉三角实例

    大家好,本篇文章主要讲的是用JAVA实现杨辉三角实例,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • SpringBoot整合SpringSecurity实现认证拦截的教程

    SpringBoot整合SpringSecurity实现认证拦截的教程

    我们写的任何一个项目,都应该有安全防护,不应该让这个项目进行“裸奔”,否则很容易被别人进行攻击。而在SpringBoot环境中,其实可以很容易实现安全保护,本文给大家介绍SpringBoot如何整合SpringSecurity实现认证拦截,需要的朋友可以参考下
    2023-05-05
  • Java实战之仿天猫商城系统的实现

    Java实战之仿天猫商城系统的实现

    这篇文章主要介绍了如何利用Java制作一个基于SSM框架的迷你天猫商城系统,文中采用的技术有JSP、Springboot、SpringMVC、Spring等,需要的可以参考一下
    2022-03-03

最新评论