@RequestBody和@RequestParam和@PathVariable

news/2024/10/20 18:51:47/

@RequestBody

写着写着忘记了mvc这几个常用的注解的作用,一时有点凝噎。
为什么get请求不用加@RequestBody也能接收到参数,post请求不加@RequestBody就接收不到参数?

这是因为HTTP协议规定了请求方式对应的数据传递方式不同。对于GET请求,参数通常通过URL的查询字符串传递,也就是在URL后面添加?key1=value1&key2=value2这样的查询字符串。Spring MVC会自动将查询字符串中的参数解析到方法的参数上,所以不需要加@RequestBody注解。

而对于POST请求,请求体中的数据是通过HTTP报文的正文部分进行传输的,而不是在URL中添加查询字符串。在这种情况下,Spring MVC并不会自动将请求体中的数据解析到方法的参数上。如果想要将请求体中的数据绑定到方法的参数上,就需要使用@RequestBody注解。

而如果我们POST请求的接口参数不是java对象而是普通的参数就不用加@RequestBody注解啦

@RequestParam

@RequestParam注解是Spring框架中的一个注解,用于将HTTP请求中的参数绑定到Controller中的方法参数上。具体作用如下:

  1. 绑定请求参数:可以将HTTP请求中的参数绑定到方法的参数上,方便在Controller中获取请求参数。

  2. 设置默认值:可以通过设置defaultValue属性来设置参数的默认值,当请求中没有传递该参数时,将使用默认值。

  3. 指定参数名:可以通过设置value属性来指定参数的名称,当请求中参数名与方法参数名不一致时,可以通过该属性来指定。

  4. 必填参数:可以通过设置required属性来指定参数是否为必填参数,当请求中没有传递该参数且required为true时,将会返回错误信息。

  5. 支持多个参数:当请求中存在多个同名参数时,可以通过设置@RequestParam注解的multiValue属性来获取所有参数值。

  6. 其他属性:@RequestParam注解还支持其他属性,如allowEmptyValue、defaultValueString等,用于进一步控制参数绑定的行为。

@PathVariable

如果前端请求参数是拼接在路径中的我们可以采用@PathVariable注解进行参数绑定

例如/content/tag/{id}可以写成下面的接口样式

 @DeleteMapping("/{id}")public ResponseResult deleteTag(@PathVariable("id") Long id){return tagService.deleteTag(id);}

如果是多个参数格式应该这么写:

@DeleteMapping("/{id}/{name}")
public ResponseResult deleteTag(@PathVariable("id") Long id, @PathVariable("name") String name){// 根据id和name删除标签,并返回结果
}

在上述代码中,@DeleteMapping注解的路径中有两个占位符{id}和{name},表示该接口路径中有两个参数。在方法体中,使用@PathVariable注解将这两个占位符绑定到方法的两个参数上,即id和name。这样,当客户端请求时,路径中的{id}和{name}就会被替换为具体的参数值,并传递给后端接口方法。


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

相关文章

2023年MathorCup数学建模C题电商物流网络包裹应急调运与结构优化问题解题全过程

2023年第十三届MathorCup高校数学建模挑战赛 C题 电商物流网络包裹应急调运与结构优化问题 原题再现: 电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“…

Peach Fuzzer漏洞挖掘实战

概述 本文主要介绍模糊测试技术,开源模糊测试框架Peach Fuzzer,最后使用Peach Fuzzer对Modbus Slave软件进行漏洞挖掘,并成功挖掘到0DAY漏洞。(文中涉及的漏洞已提交到国家漏洞库,现已修复) 模糊测试技术…

【C++】7. auto和nullptr(c++11)

文章目录 一、auto二、nullptr 一、auto 在C98中,auto是一个存储类说明符,表示变量具有自动存储期,即在函数或块的作用域内创建和销毁。 在C11中,auto是一个类型占位符,表示变量的类型由其初始化器自动推断。 使用如下…

ChatGPT真的有那么牛吗?

ChatGPT真的有那么牛吗?ChatGPT真的有那么牛吗? 作为一款大型语言模型,ChatGPT确实具有很高的自然语言处理和生成能力,可以生成流畅、准确和有逻辑性的语言,而且能够理解和回答广泛的问题。 它是目前最先进和最强大的…

centos集群上安装hive客户端的操作步骤以及hive介绍

系列文章目录 虚拟机centos7配置Hadoop单节点伪分布配置教程​​​​​​ hbase进阶操作——读流程与写流程介绍 HBase进阶——文件的合并、 MemStore Flush、StoreFile Compaction、 Region Split、高可用与预分区介绍 centos7虚拟机下hbase的使用案例讲解 文章目录 前言…

AI大模型快速发展,我们该如何应对?

文章目录 提问问题范例Prompt 公式 如何准确提问 随着人工智能技术的不断发展,聊天型大语言模型工具如 ChatGPT 在解决各种实际问题时具有越来越广泛的应用。这一技术的快速发展,不仅带来了更高的工作效率和更高的精度,同时也改变了人类的工作…

平安银行潘多拉指标平台建设案例

潘多拉指标平台是平安银⾏指标管理和指标应⽤的统⼀平台。该平台以业务场景为驱动,提供了 AIBI内容的基础能⼒,并结合组件化开放平台,提供数据分析与应⽤的⼀站式解决⽅案。内容⽅⾯,提供了指标、维度和标签的录⼊、发布和规范化管…

线程池详细讲解

线程池详细讲解 ​ 线程池技术思想是为了减少每次获取资源的消耗,提高对资源的利用率。 使用线程池的好处 ​ 降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗 ​ 提高响应速度, 当任务到达时,任务可以不…