简单记录下@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"?> < ...
随机推荐
- QT实现FTP服务器(三)
QFtpClient类的实现: #include "QFtpClient.h" #include <QDebug> #include <QThread> # ...
- vue中引入字体文件
在用vue来写一官网的时候,想引入外部字体文件,毕竟总感觉他自己的字体有点难看,在这里记录下 1.先下载字体文件所需的.ttf文件 我这里想引入的是华文行楷字体 百度后下载了一个3M多的ttf文件 2 ...
- DedeCms如何调用Discuz论坛主题等数据方法总结
DedeCms如何调用Discuz论坛主题等数据方法总结 同时使用Dedecms和Discuz论坛的朋友,难免要在网站内调用论坛的内容.使用Discuz论坛的JS调用方式,对搜索引擎不够友好,下面我们 ...
- MySQL的IFNULL简单使用说明
MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...
- SQL Server2005+、MySQL、Oracle 数据库字典生成工具
之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个. 特征如下: 一.支持的数据库 MS ...
- android TextView 设置部分文字背景色 和 文字颜色
通过SpannableStringBuilder来实现,它就像html里边的元素改变指定文字的文字颜色或背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- 花式GCD
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...
- Android中的Handler,以及用Handler延迟执行
项目中遇到一个情况,先生成文件再上传:但有时候发出指令后上传会不成功,需要再发一次指令方能上传. 猜想是由于文件还没生成就执行「上传」指令了.想到要延时.Android中单纯用currentThrea ...
- 用HTTP操作和文件操作把网页下载到sd卡
这里先把代码贴到这里做一个存档,写到SD卡的是一个txt文件,改成HTML格式之后会出现百度主页,但是中文是乱码,这一点先暂时不去研究了. 代码: package com.larry.gotcha; ...
- docker容器管理基础
1.命令: docker info #查看服务器上docker详细信息 docker search #搜索镜像 docker image pull nginx:1.14-alpine #下载一个镜像 ...