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}">一个控制器方法匹配多个value测试1</a><br>
<a th:href="@{/test2}">一个控制器方法匹配多个value测试2</a><br>

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

4. method属性

  • 通过请求方式映射控制器方法。
  • method属性是一个RequestMethod类型数组,表示该方法可以匹配多个请求方式。如果指定了多个method值,那么请求时满足其中之一即可。
  • 目前浏览器只能支持GET和POST方式。
  • 在提交表单时,如果指定了GET和POST以外的请求方式,则会默认以GET请求发送。
  • 如果请求地址匹配,但是请求方式不匹配,则会返回405,请求方式不允许。
  • 如果不指定请求方式,则默认可以处理所有请求方式。
  • 若要发送PUT和DELETE请求,则需通过spring提供的过滤器HiddenHttpMethodFilter。
  • 有专门用于处理指定请求方式的注解:@GetMapping、@PostMapping、@PutMapping等。
@RequestMapping(value="/test3",method=RequestMethod.POST)public String toTestMethod(){return "testMethod";}
<a th:href="@{/test3}">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.不能有username23.要有username3,且值为jack4.要有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')}">Params没有username1测试</a><br>
<a th:href="@{/test4(username1='asd',username2='qw',username3='jack',username4='qew')}">Params有username2测试</a><br>
<a th:href="@{/test4(username1='dg',username3='asd',username4='oih')}">Params有username3但值不为jack测试</a><br>
<a th:href="@{/test4(username1='ih',username3='jack',username4='jack')}">Params有username4但值为jack测试</a><br>
<a th:href="@{/test4(username1='asd',username3='jack',username4='xcv')}">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}">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";}

在这里插入图片描述

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

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

相关文章

SolidUI Gitee GVP

感谢Gitee&#xff0c;我是一个典型“吃软不吃硬”的人。奖励可以促使我进步&#xff0c;而批评往往不会得到我的重视。 我对开源有自己独特的视角&#xff0c;我只参与那些在我看来高于自身认知水平的项目。 这么多年来&#xff0c;我就像走台阶一样&#xff0c;一步一步参与…

Android AAudio

文章目录 基本概念启用流程基本流程HAL层对接数据流计时模型调试 基本概念 AAudio 是 Android 8.0 版本中引入的一种音频 API。 AAudio 提供了一个低延迟数据路径。在 EXCLUSIVE 模式下&#xff0c;使用该功能可将客户端应用代码直接写入与 ALSA 驱动程序共享的内存映射缓冲区…

metaSPAdes,megahit,IDBA-UB:宏基因组装软件安装与使用

metaSPAdes,megahit,IDBA-UB是目前比较主流的宏基因组组装软件 metaSPAdes安装 GitHub - ablab/spades: SPAdes Genome Assembler #3.15.5的预编译版貌似有问题&#xff0c;使用源码安装试试 wget http://cab.spbu.ru/files/release3.15.5/SPAdes-3.15.5.tar.gz tar -xzf SP…

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量预测多变量

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 ​1.3 缺失值分析 2 VMD经验模态分解 2.1 VMD分解实验 2.2 VMD-LSTM预测思路 3 构造训练数据 4 LSTM模型训练 5 LSTM模型预测 5.1 分量预测 5.2 可视化 时间序列预测专栏链接&#xff1a;https://blog.csdn.net/qq_…

libexif库介绍

libexif是一个用于解析、编辑和保存EXIF数据的库。它支持EXIF 2.1标准(以及2.2中的大多数)中描述的所有EXIF标签。它是用纯C语言编写的&#xff0c;不需要任何额外的库。源码地址&#xff1a;https://github.com/libexif/libexif &#xff0c;最新发布版本为0.6.24&#xff0c;…

【v8漏洞利用模板】starCTF2019 -- OOB

文章目录 前言参考题目环境配置漏洞分析 前言 一道入门级别的 v8 题目&#xff0c;不涉及太多的 v8 知识&#xff0c;很适合入门&#xff0c;对于这个题目&#xff0c;网上已经有很多分析文章&#xff0c;笔者不再为大家制造垃圾&#xff0c;仅仅记录一个模板&#xff0c;方便…

TYPE-C接口取电芯片介绍和应用场景

随着科技的发展&#xff0c;USB PDTYPE-C已经成为越来越多设备的充电接口。而在这一领域中&#xff0c;LDR6328Q PD取电芯片作为设备端协议IC芯片&#xff0c;扮演着至关重要的角色。本文将详细介绍LDR6328Q PD取电芯片的工作原理、应用场景以及选型要点。 一、工作原理 LDR63…

2024年天津体育学院专升本专业考试体育教育专业素质测试说明

天津体育学院2024年高职升本科招生专业考试体育教育专业素质测试说明 一、测试内容 100米跑、立定跳远、原地推铅球 二、考试规则 1.100米跑可穿跑鞋&#xff08;短钉&#xff09;&#xff0c;起跑采用蹲踞式。抢跑个人累计犯规两次&#xff0c;取消本项考试资格&#xff0c…

解决使用localhost或127.0.01模拟CORS失效

解决使用localhost或127.0.01模拟CORS失效 前言问题发现问题解决 前言 CORS (Cross-Origin Resource Sharing) 指的是一种机制&#xff0c;它允许不同源的网页请求访问另一个源服务器上的某些资源。通常情况下&#xff0c;如果 JavaScript 代码在一个源中发起了 AJAX 请求&…

css的一些属性

我们在写项目的时候&#xff0c;会遇到多种多样的样式&#xff0c;大部分都是由css来实现的&#xff0c;css可以让我们的页面更美观&#xff0c;css通常是配合HTML使用&#xff0c;代码较为简单! 下面我就给大家举几个较为常用的一些css属性。 1.CSS中怎样让元素圆角化&#…

spring boot 2升级为spring boot 3中数据库连接池druid的问题

目录 ConfigurationClassPostProcessor ConfigurationClassBeanDefinitionReader MybatisPlusAutoConfiguration ConditionEvaluator OnBeanCondition 总结 近期给了一个任务&#xff0c;要求是对现有的 spring boot 2.x 项目进行升级&#xff0c;由于 spring boot 2.x 版…

数据结构和算法-交换排序中的快速排序(演示过程 算法实现 算法效率 稳定性)

文章目录 总览快速排序&#xff08;超级重要&#xff09;啥是快速排序演示过程算法实现第一次quicksort函数第一次partion函数到第一次quicksort的第一个quicksort到第二次quicksort的第一个quicksort到第二次quicksort的第二个quicksort到第一次quicksort的第二个quicksort到第…

while猜数字实例——C++版

案例描述&#xff1a;系统随机生成一个1到100之间的数字&#xff0c;玩家进行猜测&#xff0c;如果猜错&#xff0c;提示玩家数字过大或过小&#xff0c;如果猜对恭喜玩家胜利并退出游戏。 逻辑框图&#xff1a; #include<bits/stdc.h> using namespace std; int main()…

The Planets: Mercury

靶场环境 整个靶场的环境&#xff0c;我出现了一点点问题&#xff0c;一直找不到主机的IP地址&#xff0c;后来参考了https://www.cnblogs.com/hyphon/p/16354436.html&#xff0c;进行了相关的配置&#xff0c;最后完成靶机环境的搭建&#xff01; 信息收集 # nmap -sn 192…

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介&#xff1a; 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频&#xff0c;截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图&#xff1a; 也可以在桌面右上角找到…

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表&#xff0c;和普通表一样使用 MySQL中的视图&#xff08;View&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。与实际表不…

DevSecOps 工具:初学者指南

DevSecOps 是开发、安全和运营的融合&#xff0c;标志着软件开发的范式转变&#xff0c;在整个软件开发生命周期 (SDLC)中无缝集成安全性。 这种方法标志着不再将安全视为开发过程中的一个阶段。除了DevSecOps 的核心原则和最佳实践之外&#xff0c;特定工具也是实施和强化安全…

C++学习笔记——类作用域和抽象数据类型

目录 一、C类作用域 类内作用域 类外作用域 二、类作用域案列详细的解释说明 三、抽象数据类型 四、总结 类作用域 抽象数据类型&#xff08;ADT&#xff09; 五、图书馆管理系统 一、C类作用域 在C中&#xff0c;类作用域是指类定义中声明的标识符&#xff08;成员变…

如何使用UUP从windows更新服务器下载windows10原版镜像

UUP是指Windows 10中的一种更新技术&#xff0c;全称为Unified Update Platform。UUP的目标是提供更快、更高效的更新体验&#xff0c;它通过增量更新的方式来更新操作系统&#xff0c;只下载和安装实际变化的部分&#xff0c;而不是整个更新包。这样可以节省带宽和时间&#x…

时间序列预测 — LSTM实现多变量多步负荷预测(Tensorflow):多输入多输出

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 ​1.3 缺失值分析 2 构造训练数据 3 LSTM模型训练 4 LSTM模型预测 4.1 分量预测 4.2 可视化 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.p…