http协议的Request Payload 和 Form Data 的区别
Request Payload VS Form Data
前端请求
我看了前端发起的请求,请求正文并不是我熟悉的 Form Data
,而是 Request Payload
。如图注意下面两个请求的 Content-Type
的区别。
Request Payload
Form Dat
了解这两个的区别之前,我们先回顾下 HTTP 请求报文格
Request Payload 大概格式如下,请求头部的 Content-Type: application/json
,并且请求正文是一个 json 格式的字符串
Form Data 大概格式如下,请求头部的 Content-Type: application/x-www-form-urlencoded
,并且请求正文是类似 get 请求 url 的请求参数
后台处理
对于 Request Payload 请求, 必须加 @RequestBody
才能将请求正文解析到对应的 bean 中,且只能通过 request.getReader()
来获取请求正文内容
对于 Form Data 请求,无需任何注解,springmvc 会自动使用 MessageConverter 将请求参数解析到对应的 bean,且通过 request.getParameter(...)
能获取请求参数
解决方案
综上,我在前端选择使用 Form Data 的方式来发起请求,使用 qs 库将 json 对象转化为字符串 (如 {name:'dahuang',age: 11}
转化为 name=dahuang&age=11
)。
之前我以为 axios 会自动根据你的请求正文格式来选择发起 Form Data 还是 Request Payload 请求,但是执行 delete 操作时,如图的 Content-Type 却是 text/plain
所以,通过通过下面的方面来解决
一个奇怪的问题
执行 delete 操作时,我将 axios 添加了 headers,content-type: 'application/x-www-form-unlencoded'
,请求如图,但是后台 springmvc 的 @DeleteMapping
接收不到请求参数,必须使用 @RequestParam String id
,才能接收到请求参数。看了这个回答,有人回复说这个是 tomcat 的问题而非 spring 的问题。
更新,今天遇到了一个问题,突然我的 @PatchMapping
也不能获取 form 表单传递的参数了。之前是可以的,然后我 google 搜到了 HttpPutFormContentFilter,然后发现这个 filter 在 WebMvcAutoConfiguration
里面配置的,而这个配置生效其中有一个条件是 @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
,恰好,我前两天整合前端代码的时候配置 springMVC 继承了 WebMvcConfigurationSupport.class
所以导致了该 fliter 不生效。
转载于:https://www.cnblogs.com/blogsliuhui/p/10696079.html
http协议的Request Payload 和 Form Data 的区别相关推荐
- python requests form data_Python爬虫:Request Payload和Form Data的简单区别说明
Request Payload 和 Form Data 请求头上的参数差别在于: Content-Type Form Data Post表单请求 代码示例 headers = { "Cont ...
- Vue-resource中post请求将data数据以request payload转换为form data的形式
今天在做项目的时候 需要往api中发送一个json格式的对象,但是怎么改都不行,当然,使用的vue 的 http方法. 而且,开始使用时 vue-resource中post请求时的一个坑,vue-re ...
- angularjs中$http模块发送post请求request payload转form data
背景: ionic+ angularjs+ cordova 在开发一个证书照片删除的时候,后端提供了一个post接口,需要前端将数据转化成form data.而在angularjs中,如果直接用pos ...
- java request payload_前后端联调之Form Data与Request Payload,你真的了解吗?
前言 做过前后端联调的小伙伴,可能有时会遇到一些问题.例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看 ...
- Ajax 通过 Request Payload 体发送 JSON 数据体
为什么80%的码农都做不了架构师?>>> AJAX POST 发送数据有2种方式: Form Data 和 Request Payload . Form Data 是我们大家 ...
- vue axios POST请求中参数以form data和request payload形式的原因
HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value& ...
- 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...
本文实例讲述了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法.分享给大家供大家参考,具体如下: HTTP请求中,如果是get请求,那么 ...
- form data和request payload的区别
2019独角兽企业重金招聘Python工程师标准>>> HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: < ...
- AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式
HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value& ...
最新文章
- 03构建之法阅读笔记之三
- [导入]用Javascript实现interface的类似功能
- java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)
- ABP源码分析三十六:ABP.Web.Api
- C# WindowService 动态修改服务名
- BGP router-id OSPF router-id 路由同步实验
- 如何在Android中设置铃声+震动
- python(源码包安装 基本使用 循环)
- 关于程序员面试时的智力题集锦
- Nginx 这一牛X的功能,你知道吗
- 写出python的基本语法规则_【Python基础】python基本语法规则有哪些-赵小刀的回答...
- 支付宝VS微信,谁在抄袭谁?
- 高等数学 - 两平面的夹角
- Windows 启动项被误删除,EFI分区误格式化恢复
- [AS3 狂想曲 K.07] BlazeDS 入门及配置 [FL 车在臣]
- matlab用imshow显示为纯白图像问题
- 短信与社交app的好处
- virtualenv virtualenvwrapper
- import上一级目录的模块(Python)
- 解决小米note5 安装了google play store 打不开的问题