【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)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROUGE指标在自然语言处理中的应用:从理论到实践

引言 你是否曾经遇到过机器生成的文本摘要与原文内容不符的情况?或者在使用机器翻译时,发现译文虽然“看起来”正确,但语义却与原文相差甚远?在自然语言处理(NLP)领域,如何科学地评估生成文本的…

编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法

在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法: yum install perl-Test-Simple

Visual Studio 2017 配置 OpenCV 4.5.5 及二次配置的导入

重点参考: Visual Studio 2017 OpenCV_4.5.0安装_opencv4.5.0下载-CSDN博客 VS2017配置OpenCV4.5_vs2017 opencv4.5.4-CSDN博客 下载准备工作就不说了,直接从官网下载就行了。 关键就两步: 1)将OpenCV的bin目录添加到环境变量…

42 模板进阶

目录 一、非类型形参 (一)简介 (二)非类型形参与宏的区别 (三)注意点 二、模板的特化 (一)概念 (二)函数模板的特化 (三&#xff…

接口测试面试题

接口测试在软件测试中占据重要位置,无论是功能测试还是性能测试,接口的稳定性至关重要。以下总结了一些常见的接口测试面试题,帮助你从容应对面试挑战! 面试官常说:“接口测试是测试的重头戏,了解接口的设计…

使用ArcGIS/ArcGIS pro绘制六边形/三角形/菱形渔网图

在做一些尺度分析时,经常会涉及到对研究区构建不同尺度的渔网进行分析,渔网的形状通常为规则四边形。构建渔网的方法也很简单,使用ArcGIS/ArcGIS Pro工具箱中的【创建渔网/CreateFishnet】工具来构建。但如果想构建其他形状渔网进行相关分析&…

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件

在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件 一、RTP流与WAV文件格式二、实现步骤三、伪代码示例四、C语言示例代码五、关键点说明六、总结在Linux操作系统上,从媒体服务器(如Media Server,简称MS)获取RTP(Real-time Transport Protocol)流…

Docker 是什么? Docker 基本观念介绍与容器和虚拟机的比较

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:历代文学,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计&#xf…

Wend看源码-Java-集合学习(List)

摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构:List、Set和Queue。本文将详细阐述这些数据类型的各自实现,并按照线程安全性进行分类,分别介绍非线程安全与线程安全的实现方…

人工智能知识分享第二天-机器学习之KNN算法

KNN算法 KNN算法简介 KNN算法思想 K-近邻算法(K Nearest Neighbor,简称KNN)。比如:根据你的“邻居”来推断出你的类别 KNN算法思想:如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别&#xff…

b站ip属地评论和主页不一样怎么回事

在浏览B站时,细心的用户可能会发现一个有趣的现象:某些用户的评论IP属地与主页显示的IP属地并不一致。这种差异引发了用户的好奇和猜测,究竟是什么原因导致了这种情况的发生呢?本文将对此进行深入解析,帮助大家揭开这一…

Robyn+Vue3+wangEditor打造个人笔记

Github:https://github.com/gwt805/MYNotes Gitee: https://gitee.com/gwt805/MYNotes GitCode: https://gitcode.com/gwt805/MYNotes/overview

BGP路由反射器,解决路由黑洞问题

路由反射器解决路由黑洞问题 路由反射器解决路由黑洞问题 路由黑洞的产生路由黑洞的解决办法路由反射器解决黑洞问题基本配置配置反射器前查看路由配置路由反射器配置反射器后查看路由路由黑洞的产生 根据BGP建立邻居的规则,只要TCP可达便可建立邻居系。如下图所示: AR2、AR…

JavaFX FXML模式下的布局

常见布局方式概述 在 JavaFX FXML 模式下,有多种布局方式可供选择。这些布局方式可以帮助您有效地组织和排列 UI 组件,以创建出美观且功能良好的用户界面。常用布局容器及布局方式 BorderPane 布局 特点:BorderPane 将空间划分为五个区域&…

二叉树的深搜_求根节点到叶节点数字之和_验证二叉搜索树_二叉树的所有路径

2331. 计算布尔二叉树的值 二叉树遍历可以用递归来解决,该问题的简单子问题是 知道左右孩子的值,再根据| &返回true/false。左子树右子树的值交给dfs解决。 终止条件就是到达叶子节点,即没有左右孩子,因为是完全二叉树 所以只需要判断一个…

Jupyter占用内存高问题排查解决

前言 前段时间我们上线了实例内存预警功能,方便大家更好地管理服务器内存资源。那么,也有同学会问,如果收到系统通知,我该怎么做呢?系统提示交换内存占用过高,但是又不知道是哪些程序占用的,怎么…

python下载,安装,环境配置

下载地址:Python Windows版本下载| Python中文网 官网 选择路径 安装完成 检测安装是否成功 使用 winr 启动运行对话框,输入 cmd 进入命令行。 输入pip list 输入 where python 查看 python.exe 的路径 环境配置 winr 打开运行对话框,输入 …

抓取手机HCI日志

荣耀手机 1、打开开发者模式 2、开启HCI、ADB调试 3、开启AP LOG 拨号界面输入*##2846579##* 4、蓝牙配对 5、抓取log adb pull /data/log/bt ./

IDEA 搭建 SpringBoot 项目之配置 Maven

目录 1?配置 Maven 1.1?打开 settings.xml 文件1.2?配置本地仓库路径1.3?配置中央仓库路径1.4?配置 JDK 版本1.5?重新下载项目依赖 2?配置 idea 2.1?在启动页打开设置2.2?配置 Java Compiler2.3?配置 File Encodings2.4?配置 Maven2.5?配置 Auto Import2.6?配置 C…

算法比赛汇总

数据科学竞赛平台网站整理 | ✨DEEPAI数据分析