内容参考自博客: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接收数据方式的拓展)的更多相关文章

  1. Linux下串口編程遇到的接收数据错误及原因(0x0d,0x11接收错误)

    摘要:Linux下串口编程遇到的接收数据错误及原因 来源:https://dotblogs.com.tw/k/2012/07/24/73572 近日在调试串口的时候发现,另一设备向我ARM板的串口发送 ...

  2. 简单记录下HTTPS中的SSL

    大概思路 大概思路是混合加密的方式,即对称加密方式混合非对称加密方式. 非对称加密会更加安全,功能也更强大,但他复杂而且速度慢. 对称加密速度快,但要保证这个公共密钥的正确性和真实性. 所以两者结合, ...

  3. 简单记录下SpringCloud的微服务架构和一些概念

    一.微服务的注册与发现——Eureka 和许多分布式设计一样,分布式的应用一般都会有一个服务中心,用于记录各个机器的信息.微服务架构也一样,我们把一个大的应用解耦成这么多个那么多个服务,那么在想要调用 ...

  4. 简单记录下RestTemplate 中postForObject调用例子

    学无止境! 今天无意中做了下RestTemplate调用demo,简单的尝试了下一个项目调用另一个项目接口示例 在A项目中创建可访问controller 然后在B项目中进行调用 调用成功

  5. 简单记录下3PC

    三PC分为三个阶段:CanCommit,PreCommit, DoCommit 整个分布式系统中,有一个组织者,其他属于参与者,当一个组织者挂了,会从其他可用site中选一个组织者出来,降低阻塞,避免 ...

  6. 简单记录下Jmeter通过CSV保存测试数据,测试用例,及将测试结果导出到Excel里

    1.CSV保存测试数据,并上传到CSV Data Set Config,设置相关属性 2.CSV保存测试用例,并上传到CSV Data Set Config,设置相关属性 3.设置一个http请求,设 ...

  7. 简单记录下springboot+jms+activemq

    1. 安装ActiveMQ 到Apache官方网站下载最新的ActiveMQ的安装包,并解压到本地目录下后运行 2. pom.xml引入  springboot配置文件中填写相关配置 3.创建生产者 ...

  8. 记录下Webapi签名机制

    首先,写这篇文章的原因是因为最近某一个项目中的接口被人为调用了,导致了数据库数据被串改.虽然是内部人无意点的,但还是引起了我的担忧,所有整理了下关于Webapi的相关签名机制. 一.我们在开发接口时, ...

  9. SSM框架下声明式事务管理(注解配置方式)

    一.spring-mybatis.xml文件中加入事务管理配置 <?xml version="1.0" encoding="UTF-8"?> < ...

随机推荐

  1. 关于JAVA中的前期绑定 后期绑定(动态绑定)

    前期绑定,在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用. 后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定.实现后期绑定,需要某种机制支持,以便 ...

  2. Hadoop MapReduce基本原理

    一.什么是: MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都 ...

  3. Map实现缓存

    为什么要使用缓存 缓存最终的目的是为减轻服务端压力,减少网络传输请求 客户端缓存 浏览器访问自带缓存~~ 页面缓存 浏览器缓存 App客户端缓存    IOS 前端开发     底层都有缓存技术的 ( ...

  4. 【Selenium】显示、隐式等待

    显示等待 WebDriverWait 超时抛出TimeOutException,默认500毫秒 public class WaitToReturnElement { /* * 设置超时时间为5秒,返回 ...

  5. spark运行方式及其常用参数

    yarn cluster模式 例行任务一般会采用这种方式运行 指定固定的executor数 作业常用的参数都在其中指定了,后面的运行脚本会省略 spark-submit \ --master yarn ...

  6. Linux下使用pip安装keras

    Keras是一个底层使用Theano或TensorFlow的深度学习框架,它的设计参考了Torch,用Python语言编写,也很方便使用Python调用,是一个高度模块化的神经网络库,支持使用GPU和 ...

  7. 如何给lemon开无限栈

    进入终端 输入"ulimit -s unlimited" 输入"lemon" 把lemon源程序拖进来,接着在弹出的lemon界面上操作即可.

  8. 洛谷P2148 E&D——打表

    题目:https://www.luogu.org/problemnew/show/P2148 先打表找个规律: #include<iostream> #include<cstdio& ...

  9. 010-- 开发脚本自动部署nginx_web和nfs及监控内存

    1.编写脚本自动部署反向代理.web.nfs: #!/bin/bash #检测安装nginx function detection_nginx(){ if [ -f /etc/nginx/nginx. ...

  10. 006--linux基础rpm和yum的使用和源码安装

    一.rpm相关命令介绍 1. 查看CD里面有的文件 2. 用rpm来安装一个名为vsftpd的rpm包 3. rpm -qi 软件包名 (查看软件包的详细信息) 4. rpm -ql 软件包名 (查看 ...