SpringMVC 学习(三)之 @RequestMapping 注解

目录

1 @RequestMapping 注解介绍

2 @RequestMapping 注解的位置

3 @RequestMapping 注解的 value 属性

4 @RequestMapping 注解的 method 属性

5 @RequestMapping 注解的 params 属性(了解)

6 @RequestMapping 注解的 headers 属性(了解)

7 @RequestMapping 注解的 produces 属性(了解)

8 @RequestMapping 注解的 consumes 属性(了解)

9 SpringMVC 支持 ant 风格的路径

10 SpringMVC 支持路径中的占位符(重点)


1 @RequestMapping 注解介绍

        @RequestMapping 注解作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。它主要有六种属性,分别是 value、method、header、params、produces、consumes。这六种属性之间是与的关系,联合使用会使请求地址的映射更加精确。

  • value:指定请求路径
  • method:指定请求方法
  • header:指定请求头信息
  • params:指定请求参数
  • produces:指定返回的媒体类型
  • consumes:指定处理的媒体类型

2 @RequestMapping 注解的位置

@RequestMapping 注解可以放在方法或类的上方,以指定请求的路径和其他相关的信息。

  • 放在处理请求的方法上,设置映射请求的请求路径的具体信息
@RequestMapping("/path")
public String handleRequest(HttpServletRequest request, HttpServletResponse response) {// 处理请求的逻辑return "success";
}

上述代码中,收到请求路径为 /path 的请求,会调用 handleRequest 方法处理

  • 放在控制器类上,设置映射请求的请求路径的初始信息
@Controller
@RequestMapping("/api")
public class MyController {@RequestMapping("/users")public String handleUsersRequest(HttpServletRequest request, HttpServletResponse response) {// 处理用户请求的逻辑return "success";}
}

上述代码中,/api 是请求路径的初始信息,/users 是请求路径的具体信息,只有收到请求路径为 /api/users 的请求,才会调用 MyController 控制器中的 handleUsersRequest 方法。

3 @RequestMapping 注解的 value 属性

        @RequestMapping 注解的 value 属性通过请求地址匹配请求映射,是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求,一般而言,必须设置 value,配合其它属性使映射更精确。

jsp
<a href="${pageContext.request.contextPath}/login/test1">请求路径: /login/test1</a><br/>
<a href="${pageContext.request.contextPath}/login/test2">请求路径: /login/test2</a>控制器
@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/test1")public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = {"test2", "/test3"})public String handler2() {System.out.println("处理器2");return "success";}
}

4 @RequestMapping 注解的 method 属性

        @RequestMapping 注解的 method 属性通过请求的请求方式匹配请求映射,是一个 RequestMethod 类型的数组,表示该请求映射能够匹配多种请求方式的请求。若当前请求的请求地址满足请求映射的 value 属性,但是请求方式不满足 method 属性,则浏览器报错 405:Request method 'POST' not supported。

        常用的请求方式有 GET、POST、PUT、DELETE,但是目前的浏览器只支持 GET、POST 请求方法,若要发送 PUT 和 DELETE 请求,则需要通过 Spring 提供的过滤器 HiddenHttpMethodFilter。

对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

  • 处理 GET 请求的映射 --> @GetMapping
  • 处理 POST 请求的映射 --> @PostMapping
  • 处理 PUT 请求的映射 --> @PutMapping
  • 处理 DELETE 请求的映射 --> @DeleteMapping
<a href="${pageContext.request.contextPath}/login/test1">请求路径: /login/test1</a><br/>
<a href="${pageContext.request.contextPath}/login/test2">请求路径: /login/test2</a>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/test1", method = {RequestMethod.POST})public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = {"test2", "/test3"}, method = {RequestMethod.GET})public String handler2() {System.out.println("处理器2");return "success";}
}

5 @RequestMapping 注解的 params 属性(了解)

        @RequestMapping注解的 params 属性通过请求参数匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系。注意,请求参数不要空格,空格也是一个字符。

  • "param":要求请求映射所匹配的请求必须携带 param 请求参数
  • "!param":要求请求映射所匹配的请求必须不能携带 param 请求参数
  • "param=value":要求请求映射所匹配的请求必须携带 param 请求参数且 param=value
  • "param!=value":要求请求映射所匹配的请求必须携带 param 请求参数但是 param!=value
<a href="${pageContext.request.contextPath}/login/test1?username=西施&password=123">请求路径: /login/test1?username=西施&password=123</a><br/>
<a href="${pageContext.request.contextPath}/login/test2?username=赵飞燕&password=111">请求路径: /login/test2?username=赵飞燕&password=111</a><br/>
<a href="${pageContext.request.contextPath}/login/test2?password=111">请求路径: /login/test2?password=111</a>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(// 请求路径只能为 /test1value = "/test1",// 请求方法既可以是 GET 方法,也可以是 POST 方法method = {RequestMethod.GET, RequestMethod.POST},// 请求路径不能必须包含 username 参数,参数 password 必须为 123params = {"username", "password=123"})public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(// 请求路径既可以为 /test2,也可以为 /test3value = {"/test2", "/test3"},// 请求方法必须是 GET 方法method = {RequestMethod.GET},// 请求路径中不能包含 username 参数,参数 password 不能为 123params = {"!username", "password!=123"})public String handler2() {System.out.println("处理器2");return "success";}
}

测试结果

请求路径包含参数 username,且 password 要为 123,则成功访问

请求路径不能包含参数 username,且 password 要为 111,否则,访问失败

6 @RequestMapping 注解的 headers 属性(了解)

        @RequestMapping 注解的 headers 属性通过请求头信息匹配请求映射,是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系。和 params 属性用法一致。

  • "header":要求请求映射所匹配的请求必须携带 header 请求头信息
  • "!header":要求请求映射所匹配的请求必须不能携带 header 请求头信息
  • "header=value":要求请求映射所匹配的请求必须携带 header 请求头信息且 header=value
  • "header!=value":要求请求映射所匹配的请求必须携带 header 请求头信息且 header!=value

7 @RequestMapping 注解的 produces 属性(了解)

        @RequestMapping 注解的 produces 属性通过返回的媒体类型即请求头 Accept 中的媒体类型)匹配请求映射,是一个字符串类型的数组常用的媒体类型有以下几种:

  • text/plain:纯文本内容,例如 HTML、XML、CSS 等
  • image/jpeg:JPEG 图像
  • image/png:PNG 图像
  • audio/mpeg:MPEG 音频
  • video/mp4:MP4 视频
  • application/pdf:PDF 文件
  • application/msword:Microsoft Word 文档
  • application/vnd.ms-excel:Microsoft Excel 文档
  • application/x-www-form-urlencoded:URL 编码的表单数据
  • application/vnd.openxmlformats-officedocument.wordprocessingml.document:OpenXML 格式的 Word 文档
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:OpenXML 格式的 Excel 文档

注:

  • Content-Type: 告诉服务器当前发送的数据是什么格式
  • Accept : 用来告诉服务器,客户端能接收哪些格式,最好返回这些格式

8 @RequestMapping 注解的 consumes 属性(了解)

        @RequestMapping 注解的 consumes 属性通过处理的媒体类型即请求头 Content-Type 中的媒体类型,一般而言,POST 方法的请求头有 Content-Type,而 GET 方法的请求头没有 Content-Type)匹配请求映射,是一个字符串类型的数组。

<form action="${pageContext.request.contextPath}/login/test1" method="post">用户名: <input type="text" name="username"/> <br>密 码: <input type="password" name="password"/> <br><input type="submit" />
</form>test2">请求路径: /login/test2</a><br/>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(// 请求路径只能为 /test1value = "/test1",// 请求路径请求头中的 Context-Type 只能为 application/x-www-form-urlencodedconsumes = {"application/x-www-form-urlencoded"})public String handler1(HttpServletRequest request) throws IOException {System.out.println("处理器1");System.out.println("Content-Type:" + request.getContentType());return "success";}
}

9 SpringMVC 支持 ant 风格的路径

  • ?:表示任意的一个字符
  • *:表示任意的 0 ~ n 个字符
  • **:表示任意的一层或多层目录,只能是 /**/xxx 的格式
<a href="${pageContext.request.contextPath}/xx/login/test1">请求路径: /xx/login/test1</a><br/>
<a href="${pageContext.request.contextPath}/xx/login/test2">请求路径: /xx/login/test2</a><br/>@Controller
@RequestMapping("/**/login")
public class MyController {@RequestMapping(value = "/?est1")public String handler1() {System.out.println("处理器1");return "success";}@RequestMapping(value = "/te*")public String handler2() {System.out.println("处理器2");return "success";}
}

10 SpringMVC 支持路径中的占位符(重点)

        当请求将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping 注解的 value 属性中通过占位符 {xxx} 表示传输的数据再通过 @PathVariable 注解,将占位符所表示的数据赋值给控制器方法的形参。

<a href="${pageContext.request.contextPath}/login/test1/西施/123"> 请求路径: /login/test1/西施/123 </a><br/>@Controller
@RequestMapping("/login")
public class MyController {@RequestMapping(value = "/?est1/{username}/{password}")public String handler1(@PathVariable("username") String username,@PathVariable("password") String password) {System.out.println("处理器1");System.out.println("username:" + username + " password:" + password);return "success";}
}

通过请求路径的方式将“西施”和“123”两个值传递给处理器

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

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

相关文章

Linux安装jdk、tomcat、MySQL离线安装与启动

一、JDK和Tomcat的安装 1.JDK安装 直接上传到Linux服务器的&#xff0c;上传jdk、tomcat安装包 解压JDK安装包 //解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 置环境变量(JAVA_HOME和PATH) vim /etc/profile 在文件末尾添加以下内容&#xff1a; //java environment expo…

算法训练营day33(补),动态规划1

// 509. 斐波那契数 func fib(n int) int { if n < 2 { return n } return fib(n-1) fib(n-2) } // 70. 爬楼梯, 本质上就是斐波那契数列但是用递归法&#xff0c;力扣提交会超时 func climbStairs(n int) int { if n < 2 { return n } a, b, sum : 1, 2, 0 for i …

C++面试:物理内存和虚拟内存

目录 物理内存&#xff08;Physical Memory&#xff09; 虚拟内存&#xff08;Virtual Memory&#xff09; windows是如何处理物理内存和虚拟内存的 物理内存管理&#xff1a; 虚拟内存管理&#xff1a; Linux是如何处理物理内存和虚拟内存的 物理内存管理&#xff1a; …

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

Demo演示&#xff1a;Qt5.15.2OSG3.6.3OsgEarth3.1的QtCreator下的msvc2019x64版本 osgQt编译 步骤一&#xff1a;下载解压 步骤二&#xff1a;CMake配置 步骤三&#xff1a;CMake配置添加osg环境 步骤四&#xff1a;CMake配置添加Qt环境 步骤五&#xff1a;CMake修改CMakeLis…

R语言入门笔记2.6

描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值&#xff0c;在这里先集中介绍&#xff0c; col1是黑色&#xff0c;2是粉红&#xff0c;3是绿色&#xff0c;4是天蓝&#xff0c;5是浅蓝&#xff0c;6是紫红&#xff0c;7是黄色&#xff0c;…

牛客单调栈结构(进阶)

Problem: 单调栈结构(进阶) 文章目录 思路解题方法复杂度Code 思路 这是一个单调栈的问题。单调栈是一种特殊的栈结构&#xff0c;它的特点是栈中的元素保持单调性。在这个问题中&#xff0c;我们需要找到每个元素左边和右边第一个比它小的元素。我们可以使用一个单调递减的栈来…

Android studio 下的APK打包失败问题解决办法

嗨&#xff0c;各位小伙伴们&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;作为移动应用开发者&#xff0c;在使用Android Studio进行APK打包时&#xff0c;有时候可能会遇到各种问题导致打包失败&#xff0c;这给我们的开发工作带来了一定的挑战。今天&#xff0c;我将和大…

mybatis---“日志工厂”和“分页”有用知识归纳(狂神说学习总结)

1.日志工厂 Mybatis内置的日志工厂提供日志功能&#xff0c;具体的日志实现有以下几种工具&#xff1a; SLF4JApache Commons LoggingLog4j 2Log4jJDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的&#xff08;按上文列举的顺序查找&a…

Singularity基本命令学习

Singularity是一个为科学计算和数据密集型任务设计的容器平台,它提供了一组强大的命令来帮助用户创建、管理和运行容器。以下是一些Singularity的基本命令,以及每个命令的简单实例,以帮助你入门和理解如何使用Singularity。 1. 安装Singularity 首先,你需要在你的系统上安…

欧瑞康真空泵650S干泵SV630罗茨泵WAU251-2001安装调试使用说明

欧瑞康真空泵650S干泵SV630罗茨泵WAU251-2001安装调试使用说明

mysql和sql server 中如何创建和管理用户

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; 在MySQL和SQL Server中创建和管理用户的过程有所不同。下面分别介绍这两种数据库系统中用户管理的常见步骤。 MySQL 创建用户 在MySQL中创建用户的语法通常如下…

杰理701N可视化SDK之LED的配置和代码浅析

杰理701N可视化SDK LED的配置 LED硬件配置LED状态配置LED状态情景配置LED在SDK中相关代码 杰理可视化工具中可以配置LED的硬件配置和LED状态配置, 在可视化工具中的LED配置选项中设置 LED硬件配置 硬件配置可设置LED名, 推LED使用的IO口以及LED的点亮方式 SDK发布的标准原理…

02|Using filesort文件排序原理详解

文件排序方式 ● 单路排序&#xff1a;是一次性取出满足条件行的所有字段&#xff0c;然后在sort buffer中进行排序&#xff1b;用trace工具可以看到sort_mode信息里显示< sort_key, additional_fields >或者< sort_key, packed_additional_fields > ● 双路排序&a…

MySQL知识点总结(五)——锁

MySQL知识点总结&#xff08;五&#xff09;——锁 锁分类表锁 & 行锁如何添加表锁&#xff1f;如何添加行锁&#xff1f; 读锁 & 写锁行锁 & 间隙锁&#xff08;gap lock&#xff09;& 临键锁&#xff08;next-key lock&#xff09; 加锁机制分析可重复读隔离…

MATLAB:数组与矩阵

2.1 数组运算 数组运算时MATLAB计算的基础。由于MATLAB面向对象的特性&#xff0c;这种数值数组称为MATLAN最重要的一种内建数据类型&#xff0c;而数组运算就是定义这种数据结果的方法。 2.1.1 数组的创建和操作 在MATLAB中一般使用方括号“[]”、逗号“,”、空格和分号“;…

数据结构与算法相关题解20240225

数据结构与算法相关题解20240225 一、58. 最后一个单词的长度二、48. 旋转图像三、69. x 的平方根四、50. Pow(x, n) 一、58. 最后一个单词的长度 简单 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度…

445. 两数相加 II(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&am…

CSP-202209-3-防疫大数据

CSP-202209-3-防疫大数据 解题思路 一、数据结构定义 对于大模拟的题&#xff0c;合适的数据结构选择十分重要&#xff0c;正确的数据结构选择能够有效的提升解题效率 // 漫游消息结构体 struct RoamingData {int date, user, region; };vector<RoamingData> roamin…

汇编反外挂

在软件保护领域&#xff0c;尤其是游戏保护中&#xff0c;反外挂是一个重要的议题。外挂通常指的是一种第三方软件&#xff0c;它可以修改游戏数据、操作游戏内存或提供其他作弊功能&#xff0c;从而给玩家带来不公平的优势。为了打击外挂&#xff0c;游戏开发者会采取一系列措…

Mac电脑配置环境变量

1.打开配置文件bash_profile open -e .bash_profile 2.如果没有创建过.bash_profile&#xff0c;则先需要创建 touch .bash_profile 3.输入你要配置的环境变量 #Setting PATH for Android ADB Tools export ANDROID_HOME/Users/xxx/android export PATH${PATH}:${ANDROID_HOME}…