SpringMVC第二阶段:@RequestMapping注解详解

news2024/11/27 0:40:22

@RequestMapping注解详解

@RequestMapping是给个方法配置一个访问地址。就比如web学习的Servlet程序,在web.xml中配置了访问地址之后,它们之间就有一个访问映射关系。

1、value属性

value 属性用于配置方法对应的访问地址.

/**
 * @RequestMapping 可以配置一个请求地址给当前方法 <br/>
 * / 表示请求地址为: http://ip:port/工程路径/   *映射*   到web目录    <br/>
 * /hello 表示地址为: http://ip:port/工程路径/hello <br/>
 */
@RequestMapping(value = "/hello")

2、params属性

params属性是要求此请求的参数匹配

params="username"			表示	请求地址必须带有username参数

params="username=abc"	表示	请求参数中必须要有username,而且值还必须是abc

params="username!=abc"	表示	有username参数,但值不能等于abc

params="!username"		表示	请求地址不能带有username参数

params= {"username!=abc","!password"}	params可以有多个值,每个值之间是&&关系
以上条件表示要求:
(username参数值不能等于 abc 	&& 	不能有password参数	)
@Controller
public class ParamController {
    /**
     * params = "username" 表示必须要有username请求参数
     * @return
     */
    @RequestMapping(value="/param1",params = "username")
    public String param1(){
        System.out.println("param1 调用了");
        return "ok";
    }


    /**
     * params = "username=wzg168" 表示必须要有请求参数username而且值必须还要是wzg168
     * @return
     */
    @RequestMapping(value="/param2",params = "username=wzg168")
    public String param2(){
        System.out.println("param2 调用了");
        return "ok";
    }


    /**
     * params = "username!=abc168" 表示两种情况: <br/>
     *  1 username参数没有 <br/>
     *  2 如果有username参数,值不能是abc168 <br/>
     * @return
     */
    @RequestMapping(value="/param3",params = "username!=abc168")
    public String param3(){
        System.out.println("param3 调用了");
        return "ok";
    }


    /**
     * params = "!username" 表示请求中不能有参数username <br/>
     * @return
     */
    @RequestMapping(value="/param4",params = "!username")
    public String param4(){
        System.out.println("param4 调用了");
        return "ok";
    }



    /**
     * params = {"username","password=123456"} 表示两个条件都要同时满足<br/>
     * 必须要有username参数,还要有password参数.密码值还是123456 <br/>
     *
     * @return
     */
    @RequestMapping(value="/param5",params = {"username","password=123456"})
    public String param5(){
        System.out.println("param5 调用了");
        return "ok";
    }

}

3、headers属性

headers 属性是要求请求头匹配 , 它的使用规则跟 params 一样.

/**
 * headers = "User-Agent" 要求请求头中要有User-Agent请求头 <br/>
 * User-Agent是 浏览器的信息 <br/>
 * @return
 */
@RequestMapping(value = "/headers1",headers = "User-Agent")
public String headers1(){
    System.out.println("headers1 方法调用了");
    return "ok";
}
/**
 * headers = "User-Agent" 要求请求头中要有User-Agent请求头 <br/>
 * User-Agent是 浏览器的信息 <br/>
 * @return
 */
@RequestMapping(value = "/headers2",headers = "User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36")
public String headers2(){
    System.out.println("headers2 方法调用了");
    return "ok";
}

4、method属性

method 属性可以对当前方法的请求方式进行限定 . 不写表示不限定.

GET请求演示:

/**
 * method = RequestMethod.GET 可以限定请求的方式 .  <br/>
 * RequestMethod.GET 表示只能是GET请求
 */
@RequestMapping(value="/getMethod" , method = RequestMethod.GET)
public String getMethod(){
    System.out.println("GET请求");
    return "ok";
}

POST请求演示:

/**
 * method = RequestMethod.POST 可以限定请求的方式 .  <br/>
 * RequestMethod.POST 表示只能是 POST 请求
 */
@RequestMapping(value="/postMethod" , method = RequestMethod.POST)
public String postMethod(){
    System.out.println(" post 请求");
    return "ok";
}

5、@RequestMapping标注在Controller类上

一般在开发的时候 , 一个模块一个 Controller 控制器

在这里插入图片描述

在这里插入图片描述

6、通配符在@RequestMapping中的使用

1、绝对匹配

@RequestMapping(value = "/headers1")
 以上的路径,表示请求地址必须为: http://ip:port/工程路径/headers1  才会调用方法

2、? 问号 匹配资源路径

? 问号表示一个任意字符,比如匹配fu[0-9a-zA-Z]
/**
 * value="/fu?" 中的问号,表示任意一个字符<br/>
 * @return
 */
@RequestMapping(value="/fu?")
public String fun1(){
    System.out.println("fun1()  /fu?  方法被调用了");
    return "ok";
}

3、* 星号 匹配资源路径

* 星号 可以匹配任意个字符
/**
 * value="/fu*" 路径中的星表示任意多个字符 <br/>
 * @return
 */
@RequestMapping(value="/fu*")
public String fun2(){
    System.out.println("fun2()  /fu*  方法被调用了");
    return "ok";
}

注:当一个路径同时匹配多个规则的时候,调用方法的优先顺序是:

绝对匹配 —>>>> ?问号匹配 ---->>>> *星号匹配

4、? 问号 匹配一个字符的一层目录

/**
 * value = "/?/fun" 路径中的?问号,表示一个字符的一层目录 <br/>
 * @return
 */
@RequestMapping(value = "/?/fun")
public String fun3(){
    System.out.println("fun3() /?/fun   方法被调用了! ");
    return "ok";
}

5、* 星号匹配任意多个字符的一层目录

/**
 * value = "/星/fun" 路径中的* 表示,表示任意个字符的一层目录 <br/>
 * @return
 */
@RequestMapping(value = "/*/fun")
public String fun4(){
    System.out.println("fun4()   /*/fun  方法被调用了! ");
    return "ok";
}

6、** 星星号 匹配多层目录

** 表示任何个字符的任何层目录
/**
 * value = "/星星/fun" 路径中的** 表示,表示任意个字符的任意层目录 <br/>
 * @return
 */
@RequestMapping(value = "/**/fun")
public String fun5(){
    System.out.println("fun5()   /**/fun  方法被调用了! ");
    return "ok";
}

以上这种通配符的方式 又叫 Ant 模式匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/538445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript实现背景图像切换3D动画效果

&#x1f431; 个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️ 作者简介&#xff1a;2022年度博客之星前端领域TOP 2&#xff0c;前端领域优质作者、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &am…

Flask全套知识点从入门到精通,学完可直接做项目

目录 Flask入门 运行方式 URL与函数的映射(动态路由) PostMan的使用 查询参数的获取 上传文件 其它参数 url_for 函数 响应-重定向 响应-响应内容 响应-自定义响应 Flask模板 模板介绍 模板的使用 模板-传参 模板使用url_for函数 过滤器介绍 Jinja模板自带过滤器 流程…

DTFT和DFT有何区别?一文为你讲解清楚

很多人在开始学习数字信号处理的时候&#xff0c;对于各种傅里叶变换特别是离散傅里叶变化的概念及作用完全不清楚&#xff0c;IC修真院在网上整理了关于DTFT、DFT的各知识点。下面就来了解一下关于DTFT和DFT的区别吧。 DTFT&#xff0c; DFT 的区别是含义不同、性质不同、用途…

Elasticsearch集群搭建与相关知识点整理

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章参考网上的课程&#xff0c;介绍Elasticsearch集群的搭建&#xff0c;以及Elasticsearch集群相关知识点整理。 如果文章有什么需要改进的地方还请大佬不吝赐教&am…

C++刷题--选择题4

1, 在&#xff08;&#xff09;情况下适宜采用 inline 定义内联函数 A 函数体含有循环语句 B 函数体含有递归语句 C 函数代码少、频繁调用 D 函数代码多&#xff0c;不常调用 解析 C&#xff0c;以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方…

SpringSecurity实现角色权限控制(SpringBoot+SpringSecurity+JWT)

文章目录 一、项目介绍二、SpringSecurity简介SpringSecurity中的几个重要组件&#xff1a;1.SecurityContextHolder&#xff08;class&#xff09;2.SecurityContext&#xff08;Interface&#xff09;3.Authentication&#xff08;Interface&#xff09;4.AuthenticationMana…

c++项目环境搭建(VMware+linux+ubantu+vscode+cmake)

想运行一个c项目&#xff0c;但是环境怎么整呢&#xff1f;b站走起&#xff01;&#xff01;&#xff01; 本文需要的安装包 链接&#xff1a;https://pan.baidu.com/s/1XJbR2F1boQ-CqV8P71UOqw 提取码&#xff1a;swin 一、在虚拟机中安装ubantu 八分钟完成VMware和ubunt…

Git命令大全,涵盖Git全部分类,非常值得收藏!

Git是一个分布式版本控制系统&#xff0c;可以让开发者在不同的平台和环境中协作开发项目。Git有很多命令&#xff0c;可以用来管理项目的状态、历史、分支、合并、冲突等。本文将介绍一些Git常用的命令&#xff0c;并给出示例和分类。 配置命令 配置命令可以用来设置Git的全局…

算法设计与分析:贪心法

目录 第一关&#xff1a;贪心法 任务描述&#xff1a; 相关知识&#xff1a; 贪心法的优缺点&#xff1a; 例题&#xff1a; 解题分析&#xff1a; 程序实现&#xff1a; 关键代码&#xff1a; 编程要求&#xff1a; 测试说明&#xff1a; 第二关&#xff1a;最小生成…

体验了下科大讯飞版ChatGPT,厉害了!

前几天科大讯飞的星火认知大模型发布了&#xff0c;我刚好有朋友在科大讯飞工作&#xff0c;于是就第一时间体验了一波。 一番体验下来确实比我预想的效果要好&#xff0c;没想到国产模型的效果还不错&#xff0c;我试了很多方面&#xff0c;比如通用常识功能、写作功能、学习…

【论文阅读】基于鲁棒强化学习的无人机能量采集可重构智能表面

只做学习记录&#xff0c;侵删原文链接 article{peng2023energy, title{Energy Harvesting Reconfigurable Intelligent Surface for UAV Based on Robust Deep Reinforcement Learning}, author{Peng, Haoran and Wang, Li-Chun}, journal{IEEE Transactions on Wireless Comm…

今日不足——学习目标做了但是没执行

今天复习概率论的时候我发现我复习数值计算方法的时候没有严格按照步骤来&#xff0c;如果按照步骤来我的最小二乘本来可以不用错的。我在复习时候的步骤之间就是抛开书本然后之间进入应用然后遇到不会的回头复习概念虽然缺失能做题目了但是不了解每个知识点的原理和思想&#…

el-drawer 被遮罩层覆盖 显示异常

这是由于元素的一些层级设置不同导致的&#xff0c;所以蒙层被放在了最顶端。解决方法就是加上如下2行代码: <el-drawer title"我是标题" :visible.sync"showDrawer" :direction"ltr" :append-to-body"true":modal-append-to-body&…

【C++ STL】 list 模拟实现

文章目录 &#x1f4cd;前言&#x1f308;STL之list的模拟实现&#x1f388;list_node节点的定义&#x1f388;iterator迭代器&#x1f56f;️构造函数&#x1f56f;️*it&#x1f56f;️->&#x1f56f;️it/it&#x1f56f;️it--/--it&#x1f56f;️! / &#x1f388;l…

Web开发介绍

Web开发介绍 1 什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如下图所示的网站&#xff1a;淘宝&#xff0c;京东等等 那么我们…

如何使用sbvadmin进行私有化部署的代码开发

前言 本文主要讲述如何使用sbvadmin进行私有化部署的代码开发&#xff0c;这里我们用的私有化仓库是gitee&#xff0c;当然你也可以用自己搭建的gitlab来做&#xff0c;原理差不多。 一、新建仓库 1.后端api 导入后端仓库&#xff1a;https://github.com/billyshen26/sbvadmi…

08- 算法解读 Mask R-CNN (目标检测)

要点&#xff1a; Mask R-CNN 解读 参考资料&#xff1a;vision/references/detection at main pytorch/vision GitHub 四 Mask R-CNN 基本信息 4.1 环境配置 Python3.6/3.7/3.8Pytorch1.10或以上pycocotools(Linux:pip install pycocotools; Windows:pip install pycoco…

Zigbee物联网应用与开发复习汇总(附某高校期末真题试卷)

文章目录 一、知识梳理二、编程实战三、高校真题A卷B卷 一、知识梳理 1. Zigbee、蓝牙、IEEE802.11b&#xff08;WiFi&#xff09;标准都是工作在2.4G频段的无线通信标准&#xff1b;Zigbee主要用在短距离无线控制系统&#xff0c;传输少量的控制信息&#xff1b; 2. 短距离无…

【Linux系统】Linux进程信号详解

Linux进程信号 0 引言1 认识信号1.1 什么是信号1.2 发送信号的本质1.3 信号的处理 2 信号的产生2.1 键盘产生2.2 调用系统函数向进程发送信号2.3 由软件条件产生信号2.4 硬件异常产生信号 3 信号的保存4 信号的处理5 总结 0 引言 本篇文章会从Linux信号的产生到信号的保存&…

rtl仿真器-epicsim安装和测试

前言 epicsim 是芯华章的仿真器&#xff0c;基于iverilog 据说速度快两倍。 源码 github https://github.com/x-epic/EpicSim gittee https://gitee.com/x-epic/ 公司网站 https://www.x-epic.com/index.html#/en/developer 维护中了 安装 依赖 有些 apt-get install 就可…