简单记录下@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"?> < ...
随机推荐
- 【BZOJ】1007 水平可见直线
[分析] 维护一个下凸包. 首先依照斜率来从小到大排序. 考虑斜率同样的,肯定仅仅能选截距大的,把截距小的给筛掉. 然后用栈来维护下凸包.先压入前两条直线. 然后对于每一条直线i,设栈中上一条直线p= ...
- 2016/06/02 网摘记录 svn 服务器端 客户端 安装使用
http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html http://www.cnblogs.com/xiaobaihom ...
- 序列化模块 json pickel shelve
一.json 模块 1.定义 将字典.列表等内容转换成字符串的过程就是序列化. 操作的数据类型有限,但是可以支持所有编程语言操作. 2.为什么要有序列化? 1.以某种存储形式使自定义对象持久化. 2 ...
- compile java sources
Information:javac 1.8.0_91 was used to compile java sources D:\myjdk\bin\java "-javaagent:C:\Pr ...
- aapt2 错误
android.enableAapt2=false Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conf ...
- Struts%$#区别
1.#符号的用途一般有三种.1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀.实际上,#相当于Action ...
- java中的泛型类和泛型方法
1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...
- POJ3020 二分图匹配——最小路径覆盖
Description The Global Aerial Research Centre has been allotted the task of building the fifth gener ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(二)---Vmware及GuestOS的设置
原文发表于百度空间,2009-01-08========================================================================== 这一篇是主 ...
- 使用mysqlfrm恢复frm表结构,获得建表语句
1.mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句. 下载链接:https://downloads.mysql.com/archives/u ...