简单记录下@RequestBody(关于它和@RequestParam接收数据方式的拓展)
内容参考自博客:https://blog.csdn.net/ff906317011/article/details/78552426
这个标注是用来注释controller中的请求方法中的参数的,那么什么时候要用这个注解呢?
主要看请求的方式和请求header的编码方式:
1.请求方式为get/post时,根据request header Content-Type的值来判断:
如果Content-Type是application/x-www-form-urlencoded的话,可以选择用这个注解,但这种情况用@ReauestParam也能处理
(不过似乎如果上传的是Content-Type是application/x-www-form-urlencoded的json数据的话,可以用@RequestParam 的 Map型数据来接~)
如果是multipart/form-data,这个注解不能处理
如果是像application/json, application/xml其他格式,则必须使用这个注解来处理!(可以直接把传过来的json数据绑定到对象参数中去)
2.请求方式为put时,根据request header Content-Type的值来判断:
如果Content-Type是application/x-www-form-urlencoded的话,必须用这个注解来处理
如果是multipart/form-data,不能处理
如果是像application/json, application/xml其他格式,必须用这个注解来处理
注意!这个RequestBody接收的是json字符串!一般建议如果是表单的提交,后台可以用对象来收,RequestBody会自动转换,并且前端要
JSON.stringify(from)
,然后记得改header为json!
看个例子。首先是用@requestParam:
前端:
$.ajax({
url: productBase.baseUrl + "/saveProductbaseEdition",
type: "POST",
data: {userId:getCookie(appCommon.personid)},
//data:'{"userId":"getCookie(appCommon.personid)"}',//传个使用者的id过去
success: function (data) {
console.log(data);
if (data.code == '0') {
layerTips.msg("归档成功!");
productBase.refresh();
} else {
layerTips.msg("归档失败!")
}
}
});
那个getCookie是一个id,然后后端:
@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
@PostMapping("/saveProductbaseEdition")
public R saveEdition(@RequestParam Map<String, Object> map) {
System.out.println("##########test "+map.get("userId"));
//productBaseService.saveEdition();
return R.ok();
}
用一个map来接收,成功收到对象。

这里这个data不是json的意思,应该是Ajax这个参数的一种形式 ,然后它会自动帮你转换成正确的形式传过去。
然后是用@RequestBody来接收json,由于这个注解要求传过来的是json字符串,一开始不知道,也是这样写,然后一直报错说什么不能识别,

后来写了个实验来证明这个确实是要字符串的json:
前端:
$.ajax({
url: productBase.baseUrl + "/saveProductbaseEdition",
type: "POST",
//data: {userId:getCookie(appCommon.personid)},
data:'{"userId":"getCookie(appCommon.personid)"}',//传个使用者的id过去
headers : {
'Content-Type' : 'application/json;charset=utf-8'
},
success: function (data) {
console.log(data);
if (data.code == '0') {
layerTips.msg("归档成功!");
productBase.refresh();
} else {
layerTips.msg("归档失败!")
}
}
});
layer.close(index);
});
后端:
@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
@PostMapping("/saveProductbaseEdition")
public R saveEdition(@RequestBody Map<String, Object> map) {
System.out.println("##########test "+map.get("userId"));
//productBaseService.saveEdition();
return R.ok();
}
可以看到前端加了head的说明,然后这里的json是全字符串,所以拿到的是:

不过这里也发现,如果直接传一个值过去,好像也可以……
前端:
$.ajax({
url: productBase.baseUrl + "/saveProductbaseEdition",
type: "POST",
//data: {userId:getCookie(appCommon.personid)},
data: getCookie(appCommon.personid),//传个使用者的id过去
headers : {
'Content-Type' : 'application/json;charset=utf-8'
},
success: function (data) {
console.log(data);
if (data.code == '0') {
layerTips.msg("归档成功!");
productBase.refresh();
} else {
layerTips.msg("归档失败!")
}
}
});
后端:
@ApiOperation(value="基地数据信息归档操作", notes="基地数据信息归档操作")
@PostMapping("/saveProductbaseEdition")
public R saveEdition(@RequestBody String id) {
System.out.println("##########test "+id);
//productBaseService.saveEdition();
return R.ok();
}
然后后面直接用个String类型的值来接,也拿到了数据~
更多细节到参考博客:https://blog.csdn.net/ff906317011/article/details/78552426上去了解!
简单记录下@RequestBody(关于它和@RequestParam接收数据方式的拓展)的更多相关文章
- Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)
摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...
- 简单记录下HTTPS中的SSL
大概思路 大概思路是混合加密的方式,即对称加密方式混合非对称加密方式. 非对称加密会更加安全,功能也更强大,但他复杂而且速度慢. 对称加密速度快,但要保证这个公共密钥的正确性和真实性. 所以两者结合, ...
- 简单记录下SpringCloud的微服务架构和一些概念
一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...
- 简单记录下RestTemplate 中postForObject调用例子
学无止境! 今天无意中做了下RestTemplate调用demo,简单的尝试了下一个项目调用另一个项目接口示例 在A项目中创建可访问controller 然后在B项目中进行调用 调用成功
- 简单记录下3PC
三PC分为三个阶段:CanCommit,PreCommit, DoCommit 整个分布式系统中,有一个组织者,其他属于参与者,当一个组织者挂了,会从其他可用site中选一个组织者出来,降低阻塞,避免 ...
- 简单记录下Jmeter通过CSV保存测试数据,测试用例,及将测试结果导出到Excel里
1.CSV保存测试数据,并上传到CSV Data Set Config,设置相关属性 2.CSV保存测试用例,并上传到CSV Data Set Config,设置相关属性 3.设置一个http请求,设 ...
- 简单记录下springboot+jms+activemq
1. 安装ActiveMQ 到Apache官方网站下载最新的ActiveMQ的安装包,并解压到本地目录下后运行 2. pom.xml引入 springboot配置文件中填写相关配置 3.创建生产者 ...
- 记录下Webapi签名机制
首先,写这篇文章的原因是因为最近某一个项目中的接口被人为调用了,导致了数据库数据被串改.虽然是内部人无意点的,但还是引起了我的担忧,所有整理了下关于Webapi的相关签名机制. 一.我们在开发接口时, ...
- SSM框架下声明式事务管理(注解配置方式)
一.spring-mybatis.xml文件中加入事务管理配置 <?xml version="1.0" encoding="UTF-8"?> < ...
随机推荐
- Xamarin.Android 记事本(二)自定义AlertDialog
导读 1.自定义一个AlertDialog 2.添加一条数据 正文 记事本应当有一个添加功能,这里我打算在右上角放一个item,然后点击这个item弹出一个对话框,输入名称,点击确定跳转到另一个act ...
- redis中键值对中值的各种类型
1 value的最基本的数据类型是String 2 如果value是一张图片 先对图片进行base64编码成一个字符串,然后再保存到redis中,用的时候进行base64解码即可. 这是base64的 ...
- Micro Frontends
Micro Frontends - extending the microservice idea to frontend development https://micro-frontends.or ...
- LIS n^2&nlogn模板
LIS nlogn模板 http://acm.hdu.edu.cn/showproblem.php?pid=1950 #include <iostream> #include <st ...
- POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP
题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS Memory Limit: 65 ...
- pkg-config相关
编译fuse的命令 gcc myfuse.c -o myfuse `pkg-config fuse --cflags --libs` 中的 pkg-config fuse --cflags --lib ...
- SocketErrorCode:10022
在编写.net的网络服务器时,我使用了裸socket来实现.在windows上,或者在linux上通过.net core来跑时都没有什么问题,但是通过mono运行调用socket.Bind()时却总是 ...
- 【POJ 1151】 Altlantis
[题目链接] 点击打开链接 [算法] 线段树扫描线 推荐一篇比较容易理解的线段树扫描线的文章 : https://blog.csdn.net/u013480600/article/details/22 ...
- Code:log4
ylbtech-Code:log4 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. http://logging.apache.org/log4net/ 0 ...
- vue+webpack 引入jquery
1 首先 cnpm install jquery:这时jquery已经安装成功,可以使用jquery,但是jquery不是全局的,需要在使用的组件中引入jquery,jquery的路径是jquery/ ...