SpringMvc(2)RequestMapping注解

RequestMapping注解

  • 1 、RequestMapping的作用
  • 2、RequestMapping的出现位置
  • 3、类上与方法上结合使用
  • 4、RequestMapping注解的value属性
    • 4.1 value属性的使用
    • 4.2 Ant风格的value
    • 4.3 value中的占位符(重点)
  • 5、RequestMapping注解的method属性
    • 5.2衍生Mapping
    • 5.3web的请求方式
  • 6 、RequestMapping注解的params属性
    • 6.1 params属性的理解
    • 6.2params属性的4种用法
    • 6.3 测试
  • 7、RequestMapping注解的headers属性
    • 7.2 headers属性的4种用法

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";}}

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

前面都要加上/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;@Controllerpublic class Mycontroller {
@RequestMapping(value = {"/heihei","/haha"})public String my(){return "heihei";}@RequestMapping("/")public String index(){return "index";}
}
<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>heihei</title>
</head>
<body>
<h1>heihei</h1>
</body>
</html>
<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<h1>首页</h1>
<a th:href="@{/heihei}">嘿嘿请求</a>
<a th:href="@{/haha}">哈哈请求</a>
</body>
</html>

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

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";}
<a th:href="@{/test/123/123456}">测试占位符</a>

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

5、RequestMapping注解的method属性

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

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

因此,可以看出,对于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";}
<!--测试RequestMapping的params属性-->
<a th:href="@{/testParams(username='admin',password='123')}">测试params属性</a>
<!--当然,你也可以这样写:这样写IDEA会报错,但不影响使用。-->
<a th:href="@{/testParams?username=admin&password=123}">测试params属性</a><br>

在这里插入图片描述

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错误!!!

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

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

相关文章

二维码图片的链接怎么提取?在线获取解码链接的方法

随着现在二维码成为内容展示的主要用途&#xff0c;很多场景下都会需要通过扫码的方式在手机上获取内容。那么在遇到无法扫码的情况时&#xff0c;可以通过提取二维码短链接来访问内容&#xff0c;点击链接跳转到对应的内容页面。 二维码链接想要快速的提取出来&#xff0c;最…

(二)Go的Mysql、Redis、Cookie、Logger等的文件配置

初始化配置 文章目录 初始化配置一、配置yaml文件二、Go读取配置文件三、初始化日志Logger四、初始化数据库&#xff08;MySQL或SqlLite&#xff09;五、初始化缓存&#xff08;Redis&#xff09;六、中间件服务&#xff08;middleware&#xff09; 一、配置yaml文件 Server:M…

Github进行fork后如何与原仓库同步

前言 fork了一个仓库以后怎么同步源仓库的代码&#xff1f; 步骤 1、执行命令 git remote -v 查看你的远程仓库的路径。 以一个实际例子说明&#xff0c; 来源仓库&#xff1a; TheFirstLineOfCode/basaltgit remote -v得到&#xff1a; origin https://github.com/ghmi…

53.基于微信小程序与SpringBoot的戏曲文化系统设计与实现(项目 + 论文)

项目介绍 本站采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的戏曲文化系统设计与实现管理工作系统化、规范化。 技术选型 后端:…

【Linux】日志分析与管理

作为一个运维&#xff0c;如果不会看日志&#xff0c;就好比是冬天刚刚用热水泡完了脚&#xff0c;接着就立马让人把水喝掉。 目录 一、Inode介绍 1.1 什么是inode 1.2 inode表内容 1.3 查看inode号的方式 二、日志分析 2.1 日志的用途 2.2 日志的分类 2.3 日志级别 2…

MATLAB基于图像特征的火灾检测

实验目标 基于图像特征的火灾检测 实验环境 Windows电脑、MATLAB R2020a 实验内容 1.读取图像&#xff0c;彩色图像的灰度化处理&#xff0c;进行边缘检测&#xff0c;实现对火焰的检测。 2.对两幅RGB图像进行火焰特征提取实验 3.对比分析边缘检测算法处理结果和基于图像…

比赛记录:Codeforces Round 940 (Div. 2) and CodeCraft-23 A~E

传送门:CF [前题提要]:感觉这场题目其实都很经典.遗憾的是赛时C题答案统计看成了不同的下棋的方案数,然后以为刚开始不能放不是一种答案(直接特判输出了0),卡了一场比赛.幸好最后15min险过CD,不然掉大分了 A. Stickogon 难点在于读懂题意. 读懂题意之后不难发现每根木棒都形成…

Git--原理与使用

目录 一、课程目标二、初始Git三、安装Git3.1 Linux-centos 四、Git的基本操作4.1 创建Git本地仓库 五、配置Git六、认识工作区、暂存区、版本库七、添加文件八、查看.git九、修改文件十、版本回退十一、撤销修改11.1 情况一&#xff1a;对于工作区的代码&#xff0c;还有add11…

阿斯达年代记三强争霸加速器用什么好 超好用的免费加速器

阿斯达年代记&#xff1a;三强争霸的核心玩法围绕着阿斯达大陆上的权力斗争&#xff0c;玩家将投身于三大势力——阿斯达联邦、亚高同盟及边缘叛军之间错综复杂的竞争之中。每个阵营都有其独特的背景故事、目标和战略&#xff0c;玩家的选择不仅影响个人的游戏进程&#xff0c;…

【IC设计】奇数分频与偶数分频 电路设计(含讲解、RTL代码、Testbench代码)

文章目录 原理分析实现和仿真偶数分频的电路RTL代码偶数分频的电路Testbench代码偶数分频的电路仿真波形占空比为50%的三分频电路RTL代码占空比为50%的三分频电路Testbench代码占空比为50%的三分频电路仿真波形 参考资料 原理分析 分频电路是将给定clk时钟信号频率降低为div_c…

【STM32+HAL+Proteus】系列学习教程---串口USART(DMA 方式)定长,不定长收发。

实现目标 1、利用UART实现上位机PC与下位机开发板之间的数据通信 2、学会STM32CubeMX软件关于UART的DMA模式配置 3、具体目标&#xff1a;1、实现串口定长收发数据通信&#xff1b;2、串口不定长收发数据通信。 一、DMA简介 1、什么是DMA? DMA&#xff08;Direct Memory …

多级嵌套对象数组:根据最里层id找出它所属的每层父级,适用于树形数据格式

文章目录 需求分析 需求 已知一个树形格式数据如下&#xff1a; // 示例数据 const data [{"id": "1","parentId": null,"children": [{"id": "1.1","parentId": "1","children"…

2024土木工程、城市规划与交通运输国际会议(ICCEUPT2024)

2024土木工程、城市规划与交通运输国际会议(ICCEUPT2024) 会议简介 我们诚挚邀请您参加2024年国际土木工程、城市规划和交通会议&#xff08;ICCEUPT2024&#xff09;。本次大会将在北京隆重举行&#xff0c;旨在搭建交流合作平台&#xff0c;汇聚行业精英&#xff0c;共同…

uniapp开发微信小程序图片太大处理

一、图片太大 压缩图片如果使用的蓝湖可以使用压缩&#xff08;看你小程序使用的图片是否有清晰度要求&#xff09; 没有使用蓝湖的可以使用压缩图片&#xff1a;在线缩小图片大小&#xff08;免费&#xff09;该链接压缩压缩后如果还是大的话查看图片的尺寸是否太大&am…

社科大与美国杜兰大学金融管理硕士——成为自己的光,独立又明亮

随着全球化的发展&#xff0c;金融管理成为了全球范围内备受瞩目的领域。无论是企业还是国家&#xff0c;都需要专业的金融管理人才来推动经济发展。在这样的背景下&#xff0c;社科大与美国杜兰大学联合推出的金融管理硕士项目备受关注。你想知道金融管理硕士项目的意义和价值…

求臻医学MRD产品斩获2023年度肿瘤标志物年度十大创新技术产品奖

2024年4月20日&#xff0c;中国肿瘤标志物学术大会开幕式暨名家讲坛在南京隆重召开! 会议期间&#xff0c;中国抗癌协会肿瘤标志专业委员会联合中国抗癌协会肿瘤临床检验与伴随诊断专业委员会、中国抗癌协会肿瘤基因诊断专业委员等共同发布“2023 年度肿瘤标志物创新技术产品”…

gps路径压缩算法

公司的gps点位特别多,导致数据存储以及查询都会造成一定的压力. 所以我们需要使用gps路径压缩算法 我调研了两种: k-means 和 Douglas-Peucker k-means 压缩的底层原理是: 自定义簇的数量,假设是100个,那么就会计算所有gps点,把最相近的点,放在一个簇里,以此类推,计算出100个…

适合普通人的黄金投资品种有哪些?

黄金一直以来都是投资者眼中的避险资产&#xff0c;无论是经济波动还是通货膨胀&#xff0c;它总能保持其独特的价值。对于普通人而言&#xff0c;投资黄金似乎是一件遥不可及的事情&#xff0c;但其实只要选对品种&#xff0c;普通投资者也可以轻松参与其中。在当前市场上&…

初学python记录:力扣2385. 感染二叉树需要的总时间

题目&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟&#xff0c;感染 将会从值为 start 的节点开始爆发。 每分钟&#xff0c;如果节点满足以下全部条件&#xff0c;就会被感染&#xff1a; 节点此…

[GXYCTF2019]BabyUpload-BUUTF

题&#xff1a; 步骤&#xff08;先上传木马&#xff0c;在上传.htaccess&#xff09; 准备工作 他过滤了<? ,ph等 准备&#xff1a;一句话木马&#xff0c;.htaccess文件 .htaccess SetHandler application/x-httpd-php //解析为php文件 muma1.jpg<script languag…