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://xiahunao.cn/news/2807684.html

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

相关文章

【Android】坐标系

Android 系统中有两种坐标系&#xff0c;分别为 Android 坐标系和 View 坐标系。了解这两种坐标系能够帮助我们实现 View 的各种操作&#xff0c;比如我们要实现 View 的滑动&#xff0c;你连这个 View 的位置都不知道&#xff0c;那如何去操作呢&#xff1f; 一、Android 坐标…

【Flink精讲】Flink 内存管理

面临的问题 目前&#xff0c; 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的&#xff0c;例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理&#xff0c;但同样会面临一个问题&…

【接口加密】接口加密的未来发展与应用场景

目录 3.1 接口加密与区块链技术的结合 3.1.1 区块链技术的安全特性与优势 3.1.2 接口加密在区块链中的应用案例 3.2 接口加密与物联网安全 3.2.1 物联网安全的挑战与需求 3.2.2 接口加密在物联网领域的实际应用 3.3 接口加密在金融与电子商务领域的应用 随着信息技术的不…

Java中的常量与变量:初探Java世界的基石

✨✨ 所属专栏&#xff1a; Java基石&#xff1a;深入探索Java核心基础✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 常量与变量的概念 常量 变量 总结 二. 常量的分类 1. 字面常量 2. 常量变量 3. 枚举常量…

8 buuctf解题

[BJDCTF2020]just_a_rar 1 下载&#xff0c;得到 发现有加密 使用ARCHPR设置四位数掩码爆破 得到口令2016&#xff0c;解压得到图片&#xff0c;flag在图片exif中 在备注里面看见了flag [HBNIS2018]excel破解 1 下载下来是attachment.xls 修改后缀为rar 使用010 Editor打开&a…

力扣技巧题:丢失的数字

先排后找可以让结果更简单 int cmp(const void* a, const void* b){return *(int*)a - *(int*)b; } int missingNumber(int* nums, int numsSize){qsort(nums, numsSize, 4, cmp);for(int i0; i<numsSize; i){if(nums[i] i){continue;}else{return i;}}return numsSize; }…

RandAugment(NeurIPS 2020)论文速读

paper&#xff1a;RandAugment: Practical automated data augmentation with a reduced search space third-party implementation&#xff1a;https://github.com/open-mmlab/mmpretrain/blob/main/mmpretrain/datasets/transforms/auto_augment.py 存在的问题 自动增强策…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

UI设计中,2D、2.5D、3D、4D该如何辨别?教会你

hello&#xff0c;我是大千UI工场&#xff0c;从事UI设计8年之久&#xff0c;在日常工作中经常听到一些概念&#xff0c;现在将这些概念图文并茂的呈现给您&#xff0c;欢迎点赞评论&#xff0c;如有设计需求&#xff0c;可以私信我们。 在UI设计中&#xff0c;2D、2.5D、3D和4…

企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复

随着网络技术的应用与普及&#xff0c;越来越多的企业采用了数字化办公模式&#xff0c;数字化办公模式可以为企业提供强有力的数据支撑&#xff0c;可以为企业的发展方向与产品业务调整做好基础工作。但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企…

Visual Studio 打开.edmx文件不显示表并报错:没有可用于.edmx的编辑器

打开.edmx文件时&#xff0c;呈现的是xml视图&#xff0c;不显示Diagram视图&#xff0c;且弹出报错“没有可用于.edmx的编辑器” 解决方案&#xff1a;在.edmx文件上右键&#xff0c;选择ado.net entity data model designer&#xff0c;即可正常显示表

EasyRecovery2024数据恢复软件深度评测与使用教程

一、EasyRecovery数据恢复软件是否好用&#xff1f; EasyRecovery是一款业界知名的数据恢复软件&#xff0c;具有强大的恢复能力和广泛的数据兼容性。它能帮助用户从各种存储设备中恢复丢失或删除的数据&#xff0c;包括硬盘、U盘、SD卡等。以下是关于EasyRecovery的详细分析&…

《C++面向对象程序设计》✍学习笔记

C的学习重点 C 这块&#xff0c;重点需要学习的就是一些关键字、面向对象以及 STL 容器的知识&#xff0c;特别是 STL&#xff0c;还得研究下他们的一些源码&#xff0c;下面是一些比较重要的知识&#xff1a; 指针与引用的区别&#xff0c;C 与 C 的区别&#xff0c;struct 与…

25-k8s集群中-RBAC用户角色资源权限

一、RBAC概述 1&#xff0c;k8s集群的交互逻辑&#xff08;简单了解&#xff09; 我们通过k8s各组件架构&#xff0c;知道各个组件之间是使用https进行数据加密及交互的&#xff0c;那么同理&#xff0c;我们作为“使用”k8s的各种资源的使用者&#xff0c;也是通过https进行数…

ARMv8-AArch64 的异常处理模型详解之异常向量表vector tables

目录 一&#xff0c;AArch64 异常向量表 二&#xff0c;栈指针以及SP寄存器的选择 三&#xff0c;从异常返回 一&#xff0c;AArch64 异常向量表 异常向量表&#xff08;vector tables&#xff09;是一组存放于普通内存&#xff08;normal memory&#xff09;空间的&#xf…

【智能车入门:pcb版】(蓝牙遥控、超声波避障、红外循迹)

实现最简单的蓝牙遥控、超声波避障、红外循迹&#xff09; 总览项目获取 本篇是对 上一篇博客的改进&#xff0c;上一篇博客使用面包板&#xff0c;看起来很乱&#xff0c;春节结束之后嘉立创免费打板恢复&#xff0c;板子到了之后进行焊接测试&#xff0c;相较于使用面包板&a…

【算法与数据结构】链表、哈希表、栈和队列、二叉树

目录 一、算法与数据结构 二、链表 三、哈希表 四、栈和队列 五、二叉树 一、算法与数据结构 算法和数据结构是计算机科学中两个非常重要的概念。 数据结构是组织和存储数据的方式&#xff0c;它定义了数据元素之间的关系和操作。数据结构可以分为线性结构&#xff08;如…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

让程序员设计B端界面,好比武大郎招聘:向我看齐。不忍直视!

hello&#xff0c;我是大美B端工场&#xff0c;B端系统的要求越来越高了&#xff0c;很多公司还让程序员负责页面&#xff0c;页面搞的没法看&#xff0c;也怪不得程序员。程序员来搞页面&#xff0c;那还不是武大郎招聘——向我看齐&#xff0c;以我的标准为标准吗&#xff1f…