Postman发送请求,及后台接收
一、前言
在使用postman工具测试api接口的时候,如何使用 json
字符串传值呢,而不是使用 x-www-form-urlencoded
类型,毕竟通过 key-value
传值是有局限性的。假如我要测试批量插入数据的接口呢,使用 x-www-form-urlencoded
方法根本就不适用于这种场景。
那么如何通过postman工具使用json字符串传值呢,这里就引申出来了spring的两个注解:
@RequestParam
@RequestBody
总而言之,这两个注解都可以在后台接收参数,但是使用场景不一样。
二、@RequestParam
先介绍一下@RequestParam的使用场景:
注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,比如常见的url:http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完结,其在Controller
层的写法如下图所示:
@RequestParam有三个配置参数:
required
表示是否必须,默认为true
,必须。defaultValue
可设置请求参数的默认值。value
为接收url的参数名(相当于key值)。
@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。
由于@RequestParam是用来处理 Content-Type
为 application/x-www-form-urlencoded
编码的内容的,所以在postman中,要选择body的类型为 x-www-form-urlencoded
,这样在headers中就自动变为了 Content-Type
: application/x-www-form-urlencoded
编码格式。如下图所示:
但是这样不支持批量插入数据啊,如果改用 json
字符串来传值的话,类型设置为 application/json
,点击发送的话,会报错,后台接收不到值,为 null
。
这时候,注解@RequestBody就派上用场了。继续往下看 ↓
三、@RequestBody
先介绍一下@RequestBody的使用场景:
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded
编码格式的数据,比如:application/json
、application/xml
等类型的数据。
就application/json
类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。
3.1 向表中批量插入数据
举个批量插入数据的例子,Controller层的写法如下图所示:
由于@RequestBody可用来处理 Content-Type
为 application/json
编码的内容,所以在postman中,选择body的类型为row
-> JSON(application/json)
,这样在 Headers
中也会自动变为 Content-Type
: application/json
编码格式。body内的数据如下图所示:
批量向表中插入两条数据,这里的 saveBatchNovel()
方法已经封装了 JPA
的 saveAll()
方法。body
里面的 json
语句的 key
值要与后端实体类的属性一一对应。
注意:前端使用$.ajax的话,一定要指定 contentType: "application/json;charset=utf-8;"
,默认为 application/x-www-form-urlencoded
。
3.2 后端解析json数据
上述示例是传递到实体类中的具体写法,那么如果传递到非实体类中,body里面的json数据需要怎么解析呢?我们再来看下面这个例子:
在body中,我们还是输入上面的json数据,根据分析,上面的json数据是一个List数组内嵌套着map对象,那么在后台的接收形式可写为 List<Map<String, String>>
,具体代码如下图所示:
postman请求:
控制台输出:
得出结论,通过@RequestBody可以解析Body中json格式的数据。
四、总结
注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,像POST、DELETE等其它类型的请求也可以使用。
注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded
编码格式的数据,比如:application/json
、application/xml
等类型的数据。通常用于接收POST、DELETE等类型的请求数据,GET类型也可以适用。
@requestBody一般是将多个参数封装为一个对象时使用。访问方式为application/json 一般为post
@requestParam实例: 访问方式可为form表单 一般为get
public AjaxResult getCouponCode( @RequestParam(name = "userId", required = false, defaultValue = "-1") long userId)
当接口请求是application/JSON时,直接发Json.toJSONString(对象)
public RebateRuleDTO queryRebateRule(GetRebateRule rebateRule) { return getObject(URLRebateConstant.URL_QUERY_REBATE_RULE, JSON.toJSONString(rebateRule), RebateRuleDTO.class, "queryRebateRule");
Postman发送请求,及后台接收的更多相关文章
- springMVC中对HTTP请求form data和request payload两种数据发送块的后台接收方式
最近在做项目中发现,前台提交数据时,如果通过form表单提交和ajax发送json时,springMVC后台接收不能都通过@ModelAttribute方式处理,经过一番查找后,ajax发送json请 ...
- angular的post请求,SpringMVC后台接收不到参数值的解决方案
这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBod ...
- PHP发送请求头和接收打印请求头
一.发送请求头 //发送地址 $url = 'http://127.0.0.1/2.php'; //请求头内容 $headers = array( 'Authorization: '.$basic, ...
- 页面发送请求到后台报错“Empty or invalid anti forgery header token.”问题解决
在页面向后台发送请求时,报如上图的错误的解决办法: 在WebModule.cs类中的PreInitialize方法中加 Configuration.Modules.AbpWeb().AntiForge ...
- postman发送请求的简单操作
发送请求常用的是post和get 两者的区别是: 1.post比get安全,因为参数直接暴露在url中,不能用来传递敏感信息 2.get参数通过url传递,post放在request body中 3. ...
- 关于delete请求,后台接收不到数据
在前端用axios需要这样写 /** * 删除数据 */export function del(url, data = {}) { return axios.delete(url, { data: q ...
- Angular13 Angular2发送PUT请求在后台接收不到参数
1 问题描述 利用angular2发送PUT请求时,后端接收不到参数 2 问题诊断 前段参数格式问题,后端获取参数的方法不对 3 解决问题 angular前段:将所有参数编程JSON字符串形式 spr ...
- 用javascript向一个网页连接接口发送请求,并接收该接口返回的json串
一般前端与后端的互交都是通过json字符串来互交的,我的理解就是与网页接口的来回数据传递采用的数据结构就是json.一般是这样. 比如后端的代码是这样的: @RequestMapping(value ...
- angular post发送请求和GET发送请求,服务器端接收不到信息的问题
参数可能因为编码原因,服务器端无法接收到传递的值, 这时需要用到补丁来解决这个问题 1,下载一个http.patch.js文件,放入YII框架中的js/ng文件架内 2angularjs 创建模型部分 ...
随机推荐
- 用Python打开文件夹
用Python读取文件夹, 然后打开文件 下面读取到文件的每一个内容, 然后加上路径 import os path = r'../Downloads/text/content' for filenam ...
- Cannot assign requested address的解决办法
今天想试一下redis,写了个程序,对redis连续进行100000访问,却出现以了Cannot assign requested address的问题,我起先是以为是redis的问题(可能承受不了这 ...
- linux定时任务每隔5分钟向文本追加一行
编写shell脚本 test.sh内容如下,上传到linux的root目录 更改文件权限 chmod 777 test.sh 编辑定时任务 crontab -e */5 * * * ...
- hashCode和identifyHashCode的区别
API: System类提供一个identifyHashCode(Object o)的方法,该方法返回指定对象的精确hashCode值,也是根据该对象的地址计算得到的HashCode值.当某个类的ha ...
- 人工智能对人类有哪些影响 选择Python入门怎样
人工智能对人类有哪些影响?选择Python入门怎样?人工智能是科技时代进步的产物,也是目前人们非常关注的一个产业.那么,随着人工智能的发展,对人类生活的有哪些影响呢? 1.人工智能对文化产业影响 据了 ...
- zblog常用到的几个标签介绍
文章归档 <divclass="function"id="divArchives"> <h3><#ZC_MSG028#>&l ...
- python技巧 — Chrome浏览器中的 XPath Helper
用于XPath 爬取网页结构的时候使用, 安装后 快捷键调用 左边 ctrl+ shift+x 启动 安装流程: 1. 打开chrome浏览器,扩展程序 .搜索 XPath Helper 下载安装(前 ...
- c++ (1) c++ 与c 的区别
可以说c++ 语言在c基础上扩展了许多 在学习玩c语言之后 学习c++ 会发现容易一些 但是c++也有优越于c 的地方 c++ 与c 语言都属于本地编译型语言 ,直接编译成本地编译码,运行特别快 ...
- Bipartite Checking CodeForces - 813F (线段树按时间分治)
大意: 动态添边, 询问是否是二分图. 算是个线段树按时间分治入门题, 并查集维护每个点到根的奇偶性即可. #include <iostream> #include <sstream ...
- vs setup 自动下载依赖的framework配置
1.项目->属性->签名->选中为ClickOnce清单签名->创建测试证书 2.项目->属性->安全性->启用ClickOnce安全设置 3.setup项目 ...