【JavaEE进阶】@RequestMapping注解

news/2024/12/25 22:10:16/

目录

📕前言

🌴项目准备

🌲建立连接

🚩@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)

总结:上述主要是一个建立连接的过程,对于请求和响应在后续文章介绍


http://www.ppmy.cn/news/1558093.html

相关文章

如何详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器?

要详细地遵循RustDesk的步骤来搭建远程访问和自定义服务器,你可以按照以下几个主要步骤进行操作: 下载并安装RustDesk:前往RustDesk的官方网站(https://rustdesk.com/)下载适用于你的操作系统的安装程序。然后&#xf…

Linux 系统新磁盘分区挂载

在Linux系统中,新磁盘分区挂载是一个常见的任务。以下是详细的步骤和样例: 一、查看磁盘信息 首先,使用lsblk或fdisk -l命令查看系统中的磁盘及其分区情况。 lsblk # 或 sudo fdisk -l二、分区操作 进入分区工具 使用fdisk或parted工具进…

8086汇编(16位汇编)学习笔记03.汇编指令

8086汇编(16位汇编)学习笔记03.汇编指令-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 指令种类 数据传送指令算数运算类指令位操作类指令串操作类指令控制转移类指令处理器控制类指令 数据传送类指令 **传送类指令不影响标志位,**除了标志位传…

JavaScript相关this指向面试题

这篇文章用来整理this指向相关面试题,我们请看内容 ##面试题一 var name "window";var person {name: "person",sayName: function () {console.log(this.name);} };function sayName() {var sss person.sayName;sss(); // 绑定: 默认绑定…

MQTT入门:在Spring Boot中建立连接及测试

文章目录 项目配置编写MQTT测试类代码解析 验证连接状态运行测试总结 在物联网(IoT)应用中,消息队列遥测传输(MQTT)作为一种轻量级的消息协议,因其低带宽需求和高效传输特点,广泛应用于设备通信…

MONI后台管理系统-系统三员的设计

前言: 本项目设计立足于等保测评(国家信息安全等级保护三级认证),国家信息安全等级保护三级认证中的“三员管理”是指为了确保信息系统的安全性、稳定性和可靠性,而设立的系统管理员、安全管理员和审计管理员三个独立角…

golang异常

panic如果不处理会导致应用进程挂掉 defer recover可以处理这种情况 一个recover只处理自己协程 产生panic的情况 空指针 数组越界 空map中添加键值对 错误,error接口,不严重 error.wrapof解决嵌套问题或者error.unwrap erroe.is方法,判断是…

neo4j console 报错

项目场景: neo4j 开启失败 问题描述 在终端打开 neo4j 失败打开cmd, 输入: neo4j console 报错 原因分析: 1 可能是没有配置环境变量2 当前脚本的执行策略有问题 解决方案: 解决没有配置环境变量 添加环境变量 在path路径中将变量添加进去…