2024年1月Java项目开发指南14:关于post中的body和param以及java中的@RequestBody和@RequestParam
在HTTP请求中,POST方法通常用于向服务器发送数据,这些数据可以在请求的body中,也可以在URL的param中。不过,这两者的使用方式和适用场景是不同的。
Body:在POST请求中,body主要用于包含要发送到服务器的数据。这些数据通常是表单数据、JSON数据或其他类型的数据。当你需要在请求体中发送大量数据,或者数据包含敏感信息(如密码)时,应该使用body来发送数据。因为body中的数据在传输过程中是不可见的,所以比param更安全。另外,如果你需要发送非ASCII字符,也应该使用body。
Param:在POST请求中,param也可以用来发送数据,但这种方式不常见。通常,param更常用于GET请求中,用于在URL中传递参数。在POST请求中使用param时,参数会被附加到URL的末尾,并通过问号(?)和与号(&)进行分隔。由于param中的数据在URL中是可见的,所以不应该用于发送敏感信息。另外,由于URL的长度有限制,所以param也不适合发送大量数据。
总的来说,body和param在POST请求中都可以用来发送数据,但它们的适用场景和使用方式是不同的。通常情况下,如果需要发送大量数据或敏感信息,应该使用body;如果只需要发送少量非敏感数据,并且数据适合在URL中传递,可以考虑使用param。但需要注意的是,由于param在URL中可见,所以存在安全风险,应该谨慎使用。
一
我们可能会遇到一个问题,前端没错,后端没错,参数名称没错,可是就是前端明明有数据,提交到后端,后端偏偏没有接收到数据。
这大概率就是因为前后端数据传输方式不一致造成的。
在java中,post请求,@RequestParam接收参数,那么前端发起post请求,传参也应该放在param中
在java中,post请求,@RequestBody接收参数,那么前端发起post请求,传参应该放在body中
二

以上图代码为例子,是put请求,接收body的数据,接收对象为users
users具体字段如下:

那么,我们在前端传输这个数据的时候,你传过来的数据,要和users这个java对象的字段一致,才能成功被接受
例如前端传输的数据 是名字叫data的变量
data = {userId:xxx,userNickname,……}
要注意大小写,大小写也不能错。
三 post方式传param参数
// 统一的post请求方法
// 统一的post请求方法,发送数据在请求体中
export function post(url, data = {}) {
return axiosInstance.post(url, data);
}
// 统一的post请求方法,发送数据在查询参数中
export function postWithParams(url, params = {}) {
return axiosInstance.post(url, null, { params });
}
@RequestBody和@RequestParam
一个方法中,可以有多个@RequestParam,但是只能有一个@RequestBody
在Spring MVC和Spring Boot的web控制器中,我们经常使用@RequestParam和@RequestBody注解来处理HTTP请求参数。这两个注解的作用和用法有所不同:
@RequestParam:
- 主要用于处理查询参数和表单数据(
application/x-www-form-urlencoded)。 - 可以将请求参数绑定到一个或多个方法参数上。
- 可以在一个方法中使用多个
@RequestParam注解,以绑定多个请求参数。 - 如果请求参数名和方法参数名相同,可以省略
@RequestParam注解。 - 示例:
public String myMethod(@RequestParam String param1, @RequestParam String param2)
- 主要用于处理查询参数和表单数据(
@RequestBody:
- 主要用于处理请求体中的数据,如JSON、XML等。
- 它将整个请求体映射到一个Java对象上。
- 在一个方法中,通常只能有一个
@RequestBody注解,因为请求体只能被读取一次。 - 示例:
public String myMethod(@RequestBody MyObject myObject)
因此,一个方法中可以有多个@RequestParam来绑定多个查询参数或表单数据,但通常只能有一个@RequestBody来处理整个请求体的数据。这是因为HTTP请求体(body)通常被设计为只能被读取和解析一次,而查询参数和表单数据则可以更容易地被多个参数接收和处理。
2024年1月Java项目开发指南14:关于post中的body和param以及java中的@RequestBody和@RequestParam的更多相关文章
- 转:Java项目开发规范参考
Java项目开发规范参考 - KevinLee的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/u011383131/article/details/51227860 ...
- IDEA 学习笔记之 Java项目开发深入学习(2)
Java项目开发深入学习(2): 查找变量被用到的地方 编译当前文件 增加变量watch 注意:我使用了keymap (eclipse模板),所以很多快捷键和eclipse一样. F5单步调试进入函数 ...
- IDEA 学习笔记之 Java项目开发深入学习(1)
Java项目开发深入学习(1): 定义编译输出路径: 继承以上工程配置 重新定义新的项目编译路径 添加source目录:点击添加,再点击移除: 编译项目: 常用快捷键总结: Ctrl+Space 代码 ...
- IDEA 学习笔记之 Java项目开发
Java项目开发: 新建模块: 添加JDK: 导入本地Jars: 从远程Maven仓库下载: 创建package: 新建类/接口/枚举等: 字体太小,改字体: Duplicate Scheme 修改编 ...
- 《Maven在Java项目开发中的应用》论文笔记(十七)
标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...
- 收藏基本Java项目开发的书
一.Java项目开发全程实录 第1章 进销存管理系统(Swing+SQL Server2000实现) 第2章企业内部通信系统(Swing+JavaDB实现) 第3章 企业人事管理系统( Swing+H ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- Java项目开发
项目开发整体构建: MVC+DAO设计模式 用面向对象的方式理解和使用数据库,一个数据库对应一个java项目 数据库--项目 表--类 字段--属性 表中的一条数据--类的一个对象 M:模型层 Jav ...
- HarmonyOS三方件开发指南(14)-Glide组件功能介绍
<HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...
- 《JAVA 从入门到精通》 - 正式走向JAVA项目开发的路
以前很多时候会开玩笑,说什么,三天学会PHP,七天精通Nodejs,xx天学会xx ... 一般来说,这样子说的多半都带有一点讽刺的意味,我也基本上从不相信什么快速入门.我以前在学校的时候自觉过很多门 ...
随机推荐
- USB硬件特性(速度、名称、供电)
USB传输速度 USB1.0版本,USB LS(Low Speed低速),速度1.5Mbps. USB1.1版本,USB FS(Full Speed全速),速度12Mbps. USB2.0版本,USB ...
- 专场直播预约 | 邀您探讨KaiwuDB 离散制造业场景解决方案
先导语 近日,KaiwuDB 携手山东重工集团有限公司(以下简称:山东重工) 重磅发布"离散制造业解决方案".该方案以 KaiwuDB 就地运算技术专利技术为底座,搭建了&quo ...
- 2021年9月国产数据库排行榜-墨天轮:达梦奋起直追紧逼OceanBase,openGauss反超PolarDB再升一位
2021年9月国产数据库排行榜已在墨天轮发布,本月参与排名的数据库总数达到了142个. 一.9月国产数据库流行度排行榜前15名 先来看看排行榜前五名,虽然PingCAP的TiDB分数本月下降31.82 ...
- nestjs 和 .net DI 使用并注册的区别
核心:对象之间的关系 各种 引用 --- 方便使用各种服务 1. .net 注册服务 三种注册方式 build.Service.Addsigtel 单例 瞬时 等 .addSingtel<IU ...
- 70.http拦截能做些什么(问的是axios的封装)
请求拦截器统一添加 token ,也可以手动的判断token是否过期 : 响应拦截器判断返回数据的逻辑处理,被动的判断token过期并处理 :
- kotlin基础——>基本数据类型、控制流、返回和跳转
1.对于数字的定义,支持java 8的下划线分割的方式 val a = 1_2_3 与 val a = 123 是相同的 2.如果要指定数字类型有两种方式 val a : Float = 1 或者 v ...
- 中通快递关键业务和复杂架构挑战下的 Kubernetes 集群服务暴露实践
本文是上海站 Meetup 讲师王文虎根据其分享内容整理的文章. KubeSphere 社区的小伙伴们,大家好.我是中通快递容器云平台的研发工程师王文虎,主要负责中通快递容器云平台开发.应用容器化推广 ...
- OpenFunction 应用系列之一: 以 Serverless 的方式实现 Kubernetes 日志告警
概述 当我们将容器的日志收集到消息服务器之后,我们该如何处理这些日志?部署一个专用的日志处理工作负载可能会耗费多余的成本,而当日志体量骤增.骤降时亦难以评估日志处理工作负载的待机数量.本文提供了一种基 ...
- WEB渗透01_渗透测试方法论
前言 这个系列是根据一个网络安全教程学习的笔记. 1 渗透测试 渗透测试,是为了证明网络防御按照预期计划正常运行而提供的一种机制.不妨假设,你的公司定期更新安全策略和程序,时时给系统打补丁,并采用了漏 ...
- mysql重置id排列重新排序
1.删除表中的原有的主键字段 ALTER TABLE table2 DROP id 2.表中重新创建一个字段 ALTER TABLE table2 ADD id int NOT NULL FIRST; ...