【JavaEE进阶】@RequestMapping注解
目录
📕前言
🌴项目准备
🌲建立连接
🚩@RequestMapping注解
🚩@RequestMapping 注解介绍
🎄@RequestMapping是GET还是POST请求?
🚩通过Fiddler查看
🚩Postman查看
🚩注解介绍
🚩@Target注解
📕前言
我们说springmvc现在更加合适的是叫springweb,既然是Web框架,那么当⽤⼾在浏览器中输⼊了url之后,我们的SpringMVC项⽬就可以感知到⽤⼾ 的请求,并给予响应.
咱们学习SpringMVC,重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互.
主要分以下三个方面:
- 1. 建⽴连接:将⽤⼾(浏览器)和Java程序连接起来,也就是访问⼀个地址能够调⽤到我们的 Spring 程序。
- 2. 请求:⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数 的功能.
- 3. 响应:执⾏了业务逻辑之后,要把程序执⾏的结果返回给用户,也就是响应.
比如用户去银存存款:
1. 建⽴连接:去柜台
2. 请求:带着银⾏卡,⾝份证去存款
3. 响应:银⾏返回⼀张存折.
对于SpringMVC来说,掌握了以上3个功能就相当于掌握了SpringMVC.
🌴项目准备
Spring MVC项⽬创建和SpringBoot创建项⽬相同,在创建的时候选择SpringWeb就相当于创建了 Spring MVC的项⽬
创建项⽬时,勾选上SpringWeb模块即可,如下图所⽰:
项目创建好以后,不要着急写代码,运行一下项目,看是否能正常启动
🌲建立连接
🚩@RequestMapping注解
在Spring MVC 中使⽤ @RequestMapping 来实现 URL 路由映射 ,也就是浏览器连接程序的作⽤
我们先来看看代码怎么写
创建⼀个 UserController 类,实现⽤⼾通过浏览器和程序的交互,具体实现代码如下:
这时候我们使用浏览器访问 http://127.0.0.1:8080/hello 就可访问
上述这一系列的过程,就说明我们的连接已经建立好了,通过这个url和后端服务器建立了连接,后端服务器返回了一个结果,客户端接收到了这个结果。
🚩@RequestMapping 注解介绍
@RequestMapping 是SpringWebMVC应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的 路由映射的.
表⽰服务收到请求时,路径为/hello的请求就会调⽤hello这个⽅法的代码.
路由映射:当⽤⼾访问⼀个URL时,将⽤⼾的请求对应到程序中某个类的某个⽅法的过程就叫路由映射
既然@RequestMapping 已经可以达到我们的⽬的了,我们为什么还要加@RestController呢?
我们把 @RestController 去掉,再来访问⼀次:
修改代码后要重新启动项目,刷新web页面:
可以看到,程序报了404,找不到该⻚⾯,这是客户端错误,通常认为是url不存在。也就是说使用@RequestMapping时要带上@RestController,带上其他的注解也可以,当前认为是带上@RestController。
此时就有疑问了,我们的@RequestMapping它表示建立连接了,已经和外面建立连接了,为什么还需要使用@RestController注解。
那我们使用其他注解行不行(此处只是演示,具体介绍后续讲述):
去掉@RequestMapping:
通过上述过程发现,使用@RequestMapping进行路由映射的话需要和其他注解一起使用,不一定需要和@RestController。
那@RestController起到的作用?
⼀个项⽬中,会有很多类,每个类可能有很多的⽅法,Spring程序怎么知道要执⾏哪个⽅法呢? Spring会对所有的类进⾏扫描,如果类加了注解@RestController,Spring才会去看这个类⾥⾯的⽅法 有没有加 @RequestMapping 这个注解,当然他的作⽤不⽌这⼀点,咱们先⽤,后⾯再详细讲。当前可简单的理解为,加上这个注解之后给spring做了一个标识,让spring知道哪个程序里面是有路由映射相关的信息的.
🎄@RequestMapping是GET还是POST请求?
🚩通过Fiddler查看
可以看到是一个GET请求:
🚩Postman查看
上述通过Fiddler抓包看到是一个GET请求,那么它只支持get请求吗,我们使用Postman来构造Post请求,是否可以?
构造请求步骤如下:
- 第一步
- 第二步
页面相关介绍如下:
此时就发现,不管是GET请求还是Post请求都是OK的,就可以得出一个结论,@RequestMapping是GET请求还是Post请求这个问法就不对,这个是什么请求与@RequestMapping无关,get和post是请求的属性,所以是你在发送请求的时候,是采用什么样的方式去发送的,那这里采用的是get和post,我们应该为@RequestMapping支持的是get还是post请求?通过Postman去验证,发现是全都支持的,包括delete,put请求等......
那么问题来了,如果我只想让那个请求是 POST 请求 或者 GET 请求呢?
我们该怎么做呢?
其实做法很简单,在"hello2"的后面写一个逗号,再写method按回车即可
查看method源码,method需要传递的是一个RequestMethod类型的数组,也就是可支持多个数据
查看RequestMethod源码,可以看到就是我们所使用的http的请求方式
即只需在method=后面跟上你所需要的请求方式即可,只需一个可用可不用中括号,需要多个加上中括号即可
此时在发送一个PUT请求:当前就出错了
发送一个GET/POST请求:
简单写法,仅支持一个请求:
这里就不再过多演示
小结:
- @RequetMapping默认支持所以请求方式
- 通过method指定请求方式
- @GetMapping指定支持Get请求,@PostMapping指定支持Post请求...
🚩注解介绍
我们查看上述注解的一个写法:
可以看到上图中@RequestMapping的括号中,就是写的注解的值,通过观察@RequestMapping的源码之后,就是再给@RequestMapping里面的参数复制,第一种写法是一种键值对的形式,第二种写法就是一个值,没有key;也就是说注解中括号里的参数只有一个时,那么key可以省略,会把这个值默认复制给value属性,也就是默认value="hello",当有多个参数时,key就不能省略了。
当前我们写的@RequestMapping注解的括号中都加了一个 / ,我们试一下不加行不行
发送结果:发现也可以的,建议都加上!
🚩@Target注解
我们在观察@RequestMapping注解可以发现,RequestMapping注解上面还有一些注解:
可以看到@Target里面有两个值,一个TYPE,一个METHOD;@Target表示这个注解可以应用在哪里,比如说有的注解是类注解,只能加在类上,有的注解是方法注解,有些是参数注解,就是通过@Target注解来区分。
如果@Target括号中有TYPE,表示它可以加在类上;如果@Target括号中有METHOD表示可以加在方法上。那么上面的@RequestMapping就表示可以加在类上和方法上。
我们查看@RestController注解的源码:发现只有TYPE,那么就只能加在类上
将@RequestMapping加在类上:(注:此时该类存在多个注解,多个注解无先后顺序)
发送请求:此时发送请求就会404
注意:如果类注解有@RequestMapping,方法上也有@RequestMapping,那么就需要通过类路径+方法路径进行拼接,也就是 /user/hello。这些注解的路径也可以是多层,如(/user/vv)
总结:上述主要是一个建立连接的过程,对于请求和响应在后续文章介绍
相关文章:

【JavaEE进阶】@RequestMapping注解
目录 📕前言 🌴项目准备 🌲建立连接 🚩RequestMapping注解 🚩RequestMapping 注解介绍 🎄RequestMapping是GET还是POST请求? 🚩通过Fiddler查看 🚩Postman查看 …...

【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别
写在前面的话 感慨一下, WebXR的发展是真的快,20年的时候,大多都在用AR.js做WebAR。随着WebXR标准发展,现在诸如Threejs、AFrame、Unity等多个平台都支持里WebXR。 本文将介绍在Unity中使用 Image Tracker实现Web端的AR图像识别功…...
向bash shell脚本传参
例子: ~ script % touch parameter.sh ~ script % chmod 755 parameter.sh ~ % vim parameter.shparameter.sh: #!/usr/bin/env bashecho the name of current script is $0echo the first parameter is $1echo the second parameter is $2echo all parameters: $…...
Oracle中listagg与wm_concat函数的区别
Oracle中listagg与wm_concat都可以用于将多行数据合并成一个字符串的两个函数,区别如下: 1、分隔符:listagg支持指定分隔符,wm_concat默认为","不支持指定; 2、排序:listagg支持排序后…...
热更新与资源管理
热更新、资源管理、打包发布是 Unity 游戏开发中关键的技术点。这些功能可以极大地提高项目的灵活性和资源利用效率,尤其是在多平台、长生命周期的游戏项目中。以下从技术概述、知识点分析、实现方法和代码举例逐一进行详细分析。 一、热更新 热更新指在不重新发布…...

Momentum Provably Improves Error Feedback!
以下是您提供的论文摘要的翻译: **摘要** 由于在分布式环境中训练机器学习模型时通信开销较高,现代算法不可避免地依赖于有损通信压缩。然而,如果不加以处理,压缩造成的错误会传播,并可能导致严重的不稳定行为&#…...

Elasticsearch-脚本查询
脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性…...

《Opencv》基础操作详解(3)
接上篇:《Opencv》基础操作详解(2)-CSDN博客 Opencv基础操作 目录 Opencv基础操作 18、图像边界填充 19、阈值处理(图像的二值化) 20、图像平滑处理 (1)、均值滤波(Mean Filte…...

meshy的文本到3d的使用
Meshy官方网站: 中文官网: Meshy官网中文站 编辑 Opens in a new window 编辑www.meshycn.com Meshy AI 中文官网首页 英文官网: Meshy目前似乎还没有单独的英文官网,但您可以在中文官网上找到英文界面或相关英文资料。 链…...

C语言技巧之有条件的累加
什么叫有条件的累加? 主要是依靠循环,一般形式是一个在循环里面遍历,另一个只有达到一定的条件才会累加(移动到下一个变量),从言语也能看出来,主要是用在字符串和数组里面的,毕竟链表…...

解释为什么fetch(JavaScript)无法将读取的数据存入外部变量
(一)问题描述 你可能会遇到这样的情况:在fetch之外创建变量,将fetch获取到的数据赋值给这个变量以便在fetch外使用,但在使用这个变量的时候发现值是空的,这是为什么呢? (二…...

Windows Subsystem for Linux (WSL)
目录 定义与功能 版本与特点 应用场景 启用 WSL 功能 更新WSL及其内核 下载Linux发行版本 WSL(Windows Subsystem for Linux)是微软在Windows 10和Windows 11中引入的一项功能,使用户能够在Windows上原生运行Linux的命令行工具和应用程…...
Go的Slice如何扩容
在Go语言中,slice(切片)是一个动态数组,其底层实现是基于数组,但提供了更灵活的长度和容量管理。当向slice中添加元素并超出其当前容量时,Go会自动为其分配一个更大的底层数组,并复制现有元素到…...
使用云计算开发App 有哪些坑需要避免
当我们在云计算环境下开发App时,往往会觉得一切都变得“轻松”了。毕竟,云计算提供了无限的计算资源、灵活的存储方案,还有自动化的服务,仿佛有了一个万能的工具箱,啥都能搞定。可是,别被这种“轻松”外表骗…...
ARM 架构--通用寄存器状态寄存器控制寄存器特殊用途寄存器
目录 一?ARM 架构中的寄存器 ARM 架构中的寄存器 通用寄存器 状态寄存器 控制寄存器 特殊用途寄存器 总结 二 通用寄存器 ARM 架构中的通用寄存器 ARMv7 架构 ARMv8 架构 实例 ARMv7 架构 ARMv8 架构 三 状态寄存器 ARM 架构中的状态寄存器 状态寄存器 详细…...

最新SQL Server 2022保姆级安装教程【附安装包】
目录 一、安装包下载: 下载链接:https://pan.quark.cn/s/b1c0c63d61ec 二、安装SQL Server 1.下载安装包后解压出来,双击打开 2.等待加载安装程序 3.点击基本安装 4.点击接受 5.点击浏览 6.在D盘新建文件夹 7.命名为【Sql Server】…...

学习C++:运算符
运算符 作用:用于执行代码的运算 一,算数运算符 作用:用于处理四则运算 (在除法运算中,除数不可以为0) 两个小数不可以做取模运算 (只有整型变量可以进行取模运算) 二࿰…...

pdf有密码,如何实现pdf转换word?
PDF想要转换成其他格式,但是当我们将文件拖到PDF转换器进行转换的时候发现PDF文件带有密码怎么办?今天分享PDF有密码如何转换成word方法。 方法一、 PDF文件有两种密码,打开密码和限制编辑,如果是因为打开密码,建议使…...

AI发展新态势:从技术突破到安全隐忧
AI安全的新挑战 近期AI领域出现了令人担忧的新发现。根据最新研究,AI模型已经开始展现出策略性欺骗的倾向。具体表现在以下几个方面: 策略性欺骗行为的出现 在实验中发现,当研究人员试图让AI执行一些"反Anthropic"的操作时(如获取模型权限和外部服务器访问),模…...

王佩丰24节Excel学习笔记——第二十二讲:制作甘特图与动态甘特图
【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 插入图表,针对每一个图表上的元素,都可以选中选右键进行修改数据;本章中的向两端延伸,设置数据的原理;数据格式的显示方式&…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...