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

@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 模式匹配

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自动操作魔法师4.9.0.0

产品下载 (won-soft.com) 如下图所示&#xff1a; 彻底远离枯燥乏味的工作 在日常办公中&#xff0c;开发票&#xff0c;更新客户资料&#xff0c;打印报表&#xff0c;录入数据等等工作是极为重要&#xff0c;但大部分时候这些工作是相当枯燥的。你不得得一遍又一遍的进行重复…

Cesium入门之六:Cesium加载影像图层(ArcGIS、Bing、Mapbox、高德地图、腾讯地图、天地图等各类影像图)

Cesium加载影像图层 一、ImageryLayer类常用属性常用方法 二、ImageryLayerCollection类常用属性常用方法 三、ImageryProvider类常用属性常用方法 四、ImageryProvider子类1. ArcGisMapServerImageryProvider加载ArcGIS地图服务 2. BingMapsImageryProvider加载BingMap地图服务…

Java websocket 使用

简介 WebSocket 是一种基于 TCP 协议的全双工通信协议&#xff0c;可以在浏览器和服务器之间建立实时、双向的数据通信。在 Java 中&#xff0c;我们可以使用 Java API for WebSocket&#xff08;JSR 356&#xff09;来实现 WebSocket。 WebSocket 的作用是在 Web 应用程序中…

springboot+jsp+javaweb学生信息管理系统 05hs

springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是目前最火热的java开发框架 &#xff08;1&#xff09;管理员模块&#xff1a;系统中的核心用户是管…

ChatGPT国内免费使用的方法有哪些?

目录 一、ChatGpt是什么&#xff1f; 二、ChatGPT国内免费使用的方法&#xff1a; 第一点&#xff1a;电脑端 第二点&#xff1a;手机端 三、结语&#xff1a; 一、ChatGpt是什么&#xff1f; ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语…

【MySQL】浅谈事务

哈喽&#xff0c;大家好~我是你们的老朋友&#xff1a;保护小周ღ 谈起 “事务”&#xff0c;可能大家都会在心中出现一个大大的 &#xff1f;&#xff0c;博主的理解——事务就是解决 MySql数据库在应对多线程环境下针对同一存储空间的数据修改引起的数据安全问题的一种机制…

详解二叉树

&#x1f308;目录 一、树形结构​ &#x1f333;1.1 概念1.2 其他概念1.3 树的表示形式 二、二叉树✨2.1 概念2.2 两种特殊二叉树2.3 性质2.4 二叉树存储 三、二叉树的基本操作&#x1f64c;3.1 前置说明3.2 二叉树的遍历3.3 二叉树的基本操作 四、二叉树的OJ✍️ 一、树形结构…

康耐视智能相机insight主从触发以及康耐视insight视觉系统之间数据特有交互方式

1、一个相机设置为主系统,指定自己的名称,下方可以指定发给从系统的数据,触发方式不要设置 成网络 2、另外一个相机触发方式设置成网络,然后下方指定主系统的名称 3、主系统每触发一次,就会带动从系统触发,同时指定的数据会发送到从系 统,从系统使用函数getstring获取…

爱奇艺2020校招Java方向笔试题(第一场)

1.计算下列程序的时间复杂度&#xff08;&#xff09; for (i1;i<n;i)for(j1;j<m;j){a1,a2,a3,a4};A.O(n) B.O(mn) C.O(m) D.O(1) 答案:B 2.求递归方程T(n)4T(n/2)n 的解 ( ) A.O(n) B.O(n^2) C.O(n^3) D.O(logn) 答案:B 用Mater公式计算 3.下列关于动态规划算法说法错…

【rust】| 06——语言特性 | 所有权

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础 | 变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 【rust】| 06——语言特…

国货大佬“卡脖子”后王者风范不减?小米卷出光学拍摄“天花板”?| 手机行业社媒心智品牌榜出炉

Social Power 核心解读 1、智能手机“乍暖还寒”&#xff0c;龙头品牌仍稳占消费者心智 比拼屏幕、赶超系统、迭代形态、拓展概念&#xff1f;眼花缭乱过后&#xff0c;产品精益求精&#xff0c;建立稳固的消费者认知&#xff0c;才是“保鲜”关键。在最新发布的数说故事5月…

MyBatis Plus 拦截器实现数据权限控制

一、介绍 上篇文章介绍的MyBatis Plus 插件实际上就是用拦截器实现的&#xff0c;MyBatis Plus拦截器对MyBatis的拦截器进行了包装处理&#xff0c;操作起来更加方便 二、自定义拦截器 2.1、InnerInterceptor MyBatis Plus提供的InnerInterceptor接口提供了如下方法&#x…

基于AI技术的API开发工具,自动化和智能化快速高效开发API

一、开源项目简介 ApiCat 是一款基于 AI 技术的 API 开发工具&#xff0c;它旨在通过自动化和智能化的方式&#xff0c;帮助开发人员更快速、更高效地开发 API。ApiCat 支持 OpenAPI 和 Swagger 的数据文件导入和导出&#xff0c;并可以对用户输入的 API 需求进行分析和识别&a…

真题详解(补码转换)-软件设计(七十四)

真题详解(索引查询)-软件设计&#xff08;七十三)https://blog.csdn.net/ke1ying/article/details/130659024 Composite模式&#xff1a; 以树形结构来表示”整体-部分”的关系&#xff0c;使得单个和团体的使用都具有一致性。 对一个基本有序的数组进行排序&#xff0c;适合…

精彩回顾 | Fortinet Accelerate 2023·中国区巡展厦门站

Fortinet Accelerate 2023中国区 5月16日&#xff0c;Fortinet Accelerate 2023中国区巡展来到魅力“鹭岛”——厦门&#xff0c;技术、产品和业务专家&#xff0c;携手亚马逊云科技、唯一网络等云、网、安合作伙伴&#xff0c;与交通、物流、金融等各行业典型代表客户&#x…

HR真的会嫌弃跳槽频繁的测试人员吗?

我们都知道&#xff1a;“跳槽≠涨薪”&#xff0c;但是对于测试人来说&#xff0c;跳槽绝哔能和升职加薪画上等号啊。 所以&#xff0c;有很多测试人在一家公司常常待不到1年&#xff0c;就另觅新东家&#xff0c;来借此达成升职加薪的目的。 有人提出质疑&#xff1a;为什么测…

嚯——ChatGPT是很强,但也会胡说八道。。。

现在的ChatGPT确实强&#xff0c;但是也会一本正经的胡说八道&#xff0c;例如它回答“nineteen”中有12个字母、或是旗鱼是哺乳动物…… 尽管ChatGPT可以生成流畅甚至优雅的散文&#xff0c;轻松通过困扰了AI领域超过70年的图灵测试基准&#xff0c;但它也可能看起来非常愚蠢…

探讨接口测试颗粒度

偶然间在论坛上看到一个帖子&#xff0c;帖子内容如下&#xff1a; 假设现在有一个新增商品的接口&#xff0c;返回的参数中有新增商品的 id&#xff08;每次返回的 id 都不一样&#xff09;、success&#xff08;判断是否成功&#xff0c;0 失败 1 成功&#xff09; 1. 接口…

Elasticsearch painless脚本教程(包含Java API和SpringDataElasticsearch调用脚本)

Elasticsearch painless脚本 1.什么是painless2.painless的特性3.使用kibana进行准备操作3.1 使用kibana创建索引和映射3.2 使用kibana添加测试数据 4.使用painless执行查询操作关于脚本查询须知4.1 字段查询脚本4.1 排序查询脚本 5.如何使用painless执行更新操作关于脚本查询须…

【机器学习】第二节:线性回归和线性分类

作者&#x1f575;️‍♂️&#xff1a;让机器理解语言か 专栏&#x1f387;&#xff1a;机器学习sklearn 描述&#x1f3a8;&#xff1a;本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语&#x1f493;&#xff1a;&#x1f43e;没有白走的路&#xff0c;每一步都算…