注解RequestParam与RequestBody的使用场景
特别说明:该专栏文章均来源自微信公众号《大数据实战演练》,欢迎关注!一、前言
一直有这么一个疑问:在使用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也可用于其它类型的请求,例如:POST、DELETE等请求。比如向表中插入单条数据,Controller 层的写法如下图所示:
由于@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类型也可以适用。
总算把这两个的逻辑理清楚了,postman也会用json传值了!赶紧整理成笔记,与大家分享
--END--
码字不易,如果您觉得文章写得不错,请关注作者~ 您的关注是我写作的最大动力
soul里的网恋靠谱吗?谢谢邀请比心我前几年玩了一段时间soul,认识了三个让我印象比较深刻的朋友。但,现在都没有联系了。总结了一下,suol里面有三种坏人,希望能给想去玩或者正在玩soul的男生和女生一
近来国产手机纷纷涨价为哪般?来源读特近一个月来,尽管受到新冠肺炎疫情的影响,国产手机新品上市的脚步却没有停歇,并且纷纷涨价了。2月13日,小米集团发布了2020年开年第一部国产5G旗舰手机小米10和小米10P
美国对中国的残酷剥削2月16日,美国纽约市议员ErikBottcher发布了一则视频引起中美两国网友的热议。视频中,他骑着一辆印有美国联合包裹运送服务公司(UPS)标志的脚踏电动三轮车,介绍称UPS将
iPhone13ProMax一降再降,512GB版本跌至新低,1TB版本仍然缺货下定决心购买一款千元机很容易,但下定决心购买一款万元机就很困难了,因为这个价格真的非常昂贵,手机作为便携性电子设备,虽然是成年人必备产品,但是普通手机的价格并不贵,而且市面上能够满
插电混动被归为燃油车还能挂绿牌吗近日,国家发展改革委官网公布汽车产业投资管理条例,明确将普通混合动力汽车和插电式混合动力汽车纳入燃油车投资项目,将于2021年1月10日正式实施。具体是怎么划分的?根据第五条,车辆
酷狗音乐官方纯净版!免费赠送3个月vip,真的太流畅了酷狗音乐相信大家都不陌生,早期的酷狗音乐还是非常有味道的。但如今有些混乱的布局,花里胡哨却没啥用的功能,还有猝不及防跳出来的广告,都让用户很下头。但酷狗其实悄悄推出了纯净版的酷狗音
买手机不用迷茫,目前这4部手机最值得买,几乎没有短板买手机不用迷茫,目前这4部手机最值得买,几乎没有短板!1realme真我GT大师探索版有很多人说realme真我GT大师探索版是三千价位中的天花板,一开始我还没有注意到,后来看了硬
针对高佣金,官方终于出手!美团好日子结束,蒸发2000亿只是开始文Dong审核子扬校对知秋前段时间,2021年中国百杰榜正式出炉。榜单中,王兴凭借着107亿元的捐款金额成功打败曹德旺雷军以及马云马化腾等消费者们耳熟能详的企业下,成功拿下年度首善
国产DDR5内存今年投产赶超三星美光海力士内存领域已经进入DDR5时代,尤其是随着英特尔12代酷睿发布,以及即将到来的锐龙6000系列处理器,DDR5已经迎来了全面普及的契机。目前,三星美光SK海力士依旧是DDR5内存的主
麦克风的选购原来也有这么多门道在内!选购时千万不可随便音质的好坏与麦克风息息相关。无论是在表演录音直播还是其它场合中,适用的麦克风也各不相同。挑选一组合适的麦克风可以帮助我们得到正确的声音。首先,按照不同需求和用途,我们使用动圈麦克风
雅马哈KMS2500,让你轻松在家K歌现如今,K歌已经成了许多人生活娱乐发泄压力的途径之一,约上好友一起去KTV释放热情,一次唱完非常爽快。可随着生活节奏加快,很多人忙碌了一天后很难再提起出门的兴致,每次都去外面K歌消