@RequestMapping与@GetMapping和@PostMapping等注解的区别

目录

前置知识

大致区别

使用场景上的注意事项

如何工作

使用案例

写法对比


前置知识

  • HTTP请求方法一共有9种,为:GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT
  • GET(获取资源) 本质就是发送一个请求来取得服务器上的某一资源;资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端;GET请求中,永远不会包含呈现数据;即GET请求只用来向服务器获取资源,而GET请求本身不应该携带任何呈现数据
  • POST(传输实体文本) 向指定资源提交数据进行处理请求;数据被包含在POST请求体中(例如提交表单或者上传文件);POST请求可能会导致新的资源的建立或已有资源的修改
  • MVC中,控制器的定义
  • 在Spring MVC中,控制器是指类或者类的方法上添加了@RequestMapping注解的类,并不是使用了@Controller注解的类就是控制器类
  • @Controller注解的类和@Component注解的类在功能上是一样的,都是在辅助@ComponentScan实现组件扫描
  • 只是在表意上,在用@Controller注解控制器类比用@Component注解控制器类更清楚一些

大致区别

SpringMVC以前版本的@RequestMapping,到了新版本被下面新注解替代,相当于增加的选项:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

从命名约定我们可以看到每个注解都是为了处理各自的传入请求方法类型,即@GetMapping用于处理请求方法的GET类型,@PostMapping用于处理请求方法的POST类型等

  • 如果我们想使用传统的@RequestMapping注解实现URL处理程序,那么它应该是这样的:
  • @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
  • 新方法可以简化为:
  • @GetMapping("/get/{id}")
  • @RequestMapping是一个非常通用的注解,它可以应用于类和方法层面
  • 用于将任意HTTP请求映射到控制器方法上
  • @RequestMapping表示共享映射,如果没有指定请求方式,将接收所有的HTTP请求方式
  • 需要注意的是,大多数控制器方法都应该映射到一个特定的HTTP方法,而不是使用@RequestMapping共享映射
  • 当应用于类时,表示该类处理所有的请求;当应用于方法时,表示该方法处理特定的请求
  • 此外,@RequestMapping还可以用来指定请求的URL、HTTP方法等;例如:
  • 在上述代码中,handleRequest方法将处理所有发送到”/test”的HTTP GET请求
  • 在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上;之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系
  • @GetMapping是@RequestMapping的特化版本,专门用于处理HTTP GET请求
  • 用于将GET请求映射到控制器处理方法上;当客户端发送HTTP GET请求时,Spring Boot会自动将请求映射到具有相应URL路径的控制器方法上,然后调用该方法处理请求;在调用控制器方法之前,Spring Boot会执行一系列预处理操作,例如解析请求参数和验证请求头;在调用控制器方法之后,Spring Boot会执行一系列后处理操作,例如转换响应信息和生成响应头
  • @GetMapping是一个作为快捷方式的组合注解
  • 它在功能上等价于@RequestMapping(method = RequestMethod.GET)
  • 和@RequestMapping一样,@GetMapping也可以应用于类和方法层面
  • 例如:
  • 在上述代码中,home方法将处理所有发送到”/“的HTTP GET请求

使用场景上的注意事项

  • (1) 在前端method特指了get或post的时候分别使用@GetMapping和@PostMapping
  • (2)如果传的参数是@RequestBody,多参或者传对象的情况下使用@PostMappping这种注解
  • 因为@RequestBody是获取请求body中的数据,常用于搭配@PostMapping请求来提交对象数据

如何工作

  • 所有上述注解都已在内部注解了@RequestMapping以及方法元素中的相应值
  • 例如,如果我们查看@GetMapping注解的源代码,我们可以看到它已经通过以下方式使用RequestMethod.GET进行了注解:
  • 所有其他注解都以相同的方式创建,即@PostMapping使用RequestMethod.POST进行注解,@PutMapping使用RequestMethod.PUT进行注解等

使用案例

  • (案例1) 下面是结合RestController的简单使用:
  • (案例2) 下面是使用@Controller的代码:
  • 在上面的代码中,HomeController类充当请求控制器;它的homeInit()方法将处理所有传入的URI请求"/";它接受一个Model并返回视图home;使用配置的视图解析器解析视图名称”home“的页面
  • (案例3) 下面是一个同时在类和方法上应用了 @RequestMapping 注解的示例:
  • 如上述代码所示,到 /user/login 的请求会由 login() 方法来处理,而到 /user/register 的请求会由 register() 来处理
  • (案例4) 将控制器方法映射到一个特定的HTTP方法上,应用@GetMapping、@PostMapping:
  • 通常,这样代码更规范,因为login登录时只需要向服务器获取用户数据,register注册时需要向服务器提交数据
  • 组合注解对控制器方法的请求映射进行具体区分,减少了在应用程序上要配置的元数据,并且代码也更易读,有助于控制器对请求的快速匹配以及代码功能区分等
  • (案例5) 在下面的示例中,@RequestParam注解表示请求参数“name”的值将被注入到方法参数中
  • 当客户端发送HTTP GET请求“/api/hello?name=world”时,Spring Boot会自动将请求映射到hello()方法,并将参数“world”注入到方法参数中,最终返回字符串“Hello, world!”

写法对比

  • @RequestMapping:
  • @PostMapping:

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

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

相关文章

【Java代码审计】JNDI+RMI绕过高版本JDK的限制

【Java代码审计】JNDIRMI绕过高版本JDK的限制 1.高版本JDK利用注入导致的问题2.绕过分析3.Tomcat8绕过4.工具绕过 1.高版本JDK利用注入导致的问题 JDK 6u132、7u122、8u113 开始 com.sun.jndi.rmi.object.trustURLCodebase 默认值为false,运行时需加入参数 -Dcom.s…

Go语言物联网开发安科瑞ADW300/4G电能表数据上传mqtt平台-电表接线到传输数据完整流程

电能表功能说明 ADW300是方便用户进行用电监测、集抄和管理,可灵活安装在配电箱中,可用于电力运维、环保监管等在线监测类平台中。我们本案例是用于工业售电公司对出售电的管理,设备可以监控用电情况、故障监控及警报,售电公司可…

(完美方案)解决mfc140u.dll文件丢失问题,快速且有效的修复

唉,又是丢失了mfc140u.dll,这该怎么办呢?如果你的电脑突然找不到或丢失mfc140u.dll文件,那就真是太糟糕了。别担心,我分享给你一些干货,告诉你如何快速解决mfc140u.dll丢失的问题。 一.mfc140u.dll属性功能…

百度地图城市点位数据下载并转换

概述 在浏览百度地图开放平台的时候,发现有个资源下载页面,里面有个城市中心点位和百度地图行政区划adcode映射表数据,这是一个经常使用到的数据,本文实现将这个数据转换为geojson,并借助QGIS转换为经纬度坐标或火星坐…

LCR 175. 计算二叉树的深度

一、题目描述 LCR 175. 计算二叉树的深度 二、思路 递归求左右子树的高度 三、解题思路 把大规模的问题拆分成小规模的问题1、要求根节点的二叉树深度 2、转换子问题:求左子树为根节点的二叉树深度 3、转换子问题:成求右子树为根节点的二叉树深度 4、最…

宏auto关键字(C++基础)

宏 宏可以实现对语句的同义替换&#xff0c;简单来说就是预处理阶段、编译前的替换&#xff08;包括符号&#xff0c;变量等&#xff09;。 #define LOG(x) std::cout << x << std::endl; LOG("hello") 可以正常使用。 下面通过上图中借用不同开发模…

Threejs着色器(GPU)编程——感温管网

管网,作为支撑现代城市运转的重要基础设施,是隐藏在地面之下的庞大工程网络。这些管网如同城市的血脉,负责输送各种必要的资源,如水源、热力、燃气等,同时排除废水和其他废弃物。然而,由于其位于地下,人们往往难以直接感知其存在和运行状态。为了保障这些地下管网的安全…

Leetcode - 周赛387

目录 一&#xff0c;3069. 将元素分配到两个数组中 I 二&#xff0c;3070. 元素和小于等于 k 的子矩阵的数目 三&#xff0c;3071. 在矩阵上写出字母 Y 所需的最少操作次数 四&#xff0c;3072. 将元素分配到两个数组中 II 一&#xff0c;3069. 将元素分配到两个数组中 I 本…

Express学习(三)

Express中间件 中间件的概念 什么是中间件 中间件&#xff0c;特指业务流程的中间处理环节。Express中间件的调用流程 当一个请求到达Express的服务器之后&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。类似于下图所示 Express中间件的格式 Expr…

内联函数|auto关键字|范围for的语法|指针空值

文章目录 一、内联函数1.1概念1.2特性 二、auto关键字2.2类型别名思考2.3auto简介2.4auto使用细则2.4 auto不能推导的场景 三、基于范围的for循环(C11)3.1 范围for的语法 四、指针空值nullptr(C11)4.1 C98中的指针空值 所属专栏:C初阶 一、内联函数 1.1概念 以inline修饰的函…

【LeetCode】升级打怪之路 Day 16:二叉树题型 —— 二叉树的构造

今日题目&#xff1a; 654. 最大二叉树105. 从前序与中序遍历序列构造二叉树106. 从中序与后序遍历序列构造二叉树889. 根据前序和后序遍历构造二叉树 目录 LC 654. 最大二叉树 【easy】 Problem&#xff1a;根据遍历序列来还原二叉树 【classic】 ⭐⭐⭐⭐⭐LC 105. 从前序与中…

C++vector的使用方法

文章目录 一、vector的介绍1. 文档链接2. 简要介绍 二、vector的使用1.vector的定义&#xff08;1&#xff09;构造函数&#xff08;2&#xff09;拷贝构造函数&#xff08;2&#xff09;赋值重载 2. vector 增删查改&#xff08;1&#xff09;operator []&#xff08;2&#x…

[HackMyVM]靶场 Quick3

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (U…

HTML—常用标签

常用标签&#xff1a; 标题标签&#xff1a;<h1></h1>......<h6></h6>段落标签&#xff1a;<p></p>换行标签&#xff1a;<br/>列表&#xff1a;无序列表<ul><li></li></ul> 有序列表<ol>&…

她们正在影响AI进程

今天是3月8日&#xff0c;祝广大女性同胞节日快乐&#xff01; 当下&#xff0c;人工智能正是全球科技圈最受关注的领域&#xff0c;甚至没有之一。 在人工智能领域诞生兴起的几十年内&#xff0c;女性科学家作为重要力量&#xff0c;一直在推动行业不断向前发展。 从基础算…

并查集(蓝桥杯 C++ 题目 代码 注解)

目录 介绍&#xff1a; 模板&#xff1a; 题目一&#xff08;合根植物&#xff09;&#xff1a; 代码&#xff1a; 题目二&#xff08;蓝桥幼儿园&#xff09;&#xff1a; 代码&#xff1a; 题目三&#xff08;小猪存钱罐&#xff09;&#xff1a; 代码&#xff1a; …

异常-Exception

文章目录 异常-Exception常见的运行时异常NullPointerException&#xff08;空指针异常&#xff09;ArithmeticException&#xff08;数学运算异常&#xff09;ArrayIndexOutOfBoundsException&#xff08;数组下标越界异常&#xff09;ClassCastException&#xff08;类型转换…

鸿蒙实战开发Camera组件:【相机】

相机组件支持相机业务的开发&#xff0c;开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发&#xff0c;最常见的操作如&#xff1a;预览、拍照和录像等。 基本概念 拍照 此功能用于拍摄采集照片。 预览 此功能用于在开启相机后&#xff0c;在缓冲区内重复采集…

ARC-Challenge数据集分享

来源: AINLPer公众号&#xff08;每日干货分享&#xff01;&#xff01;&#xff09; 编辑: ShuYini 校稿: ShuYini 时间: 2024-2-28 该数据集由Allen Institute for Artificial Intelligence&#xff08;AI2&#xff09;发布&#xff0c;旨在推动高级问答的研究。该数据集包含…

3D数字孪生运行不起来?该检查你的电脑配置了

运行3D数字孪生项目通常需要一定的计算资源和图形处理能力。以下是一些常见的电脑配置要求&#xff0c;可以作为参考&#xff1a;1处理器&#xff08;CPU&#xff09;&#xff1a;推荐使用多核心处理器&#xff0c;如Intel Core i7或更高级别的处理器。较高的时钟频率和较大的缓…