内容参考自博客: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. QT实现FTP服务器(三)

    QFtpClient类的实现: #include "QFtpClient.h" #include <QDebug> #include <QThread> # ...

  2. vue中引入字体文件

    在用vue来写一官网的时候,想引入外部字体文件,毕竟总感觉他自己的字体有点难看,在这里记录下 1.先下载字体文件所需的.ttf文件 我这里想引入的是华文行楷字体 百度后下载了一个3M多的ttf文件 2 ...

  3. DedeCms如何调用Discuz论坛主题等数据方法总结

    DedeCms如何调用Discuz论坛主题等数据方法总结 同时使用Dedecms和Discuz论坛的朋友,难免要在网站内调用论坛的内容.使用Discuz论坛的JS调用方式,对搜索引擎不够友好,下面我们 ...

  4. MySQL的IFNULL简单使用说明

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...

  5. SQL Server2005+、MySQL、Oracle 数据库字典生成工具

    之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个.     特征如下:         一.支持的数据库 MS ...

  6. android TextView 设置部分文字背景色 和 文字颜色

    通过SpannableStringBuilder来实现,它就像html里边的元素改变指定文字的文字颜色或背景色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  7. 花式GCD

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  8. Android中的Handler,以及用Handler延迟执行

    项目中遇到一个情况,先生成文件再上传:但有时候发出指令后上传会不成功,需要再发一次指令方能上传. 猜想是由于文件还没生成就执行「上传」指令了.想到要延时.Android中单纯用currentThrea ...

  9. 用HTTP操作和文件操作把网页下载到sd卡

    这里先把代码贴到这里做一个存档,写到SD卡的是一个txt文件,改成HTML格式之后会出现百度主页,但是中文是乱码,这一点先暂时不去研究了. 代码: package com.larry.gotcha; ...

  10. docker容器管理基础

    1.命令: docker info #查看服务器上docker详细信息 docker search #搜索镜像 docker image pull nginx:1.14-alpine #下载一个镜像 ...