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 的区别相关推荐

  1. python requests form data_Python爬虫:Request Payload和Form Data的简单区别说明

    Request Payload 和 Form Data 请求头上的参数差别在于: Content-Type Form Data Post表单请求 代码示例 headers = { "Cont ...

  2. Vue-resource中post请求将data数据以request payload转换为form data的形式

    今天在做项目的时候 需要往api中发送一个json格式的对象,但是怎么改都不行,当然,使用的vue 的 http方法. 而且,开始使用时 vue-resource中post请求时的一个坑,vue-re ...

  3. angularjs中$http模块发送post请求request payload转form data

    背景: ionic+ angularjs+ cordova 在开发一个证书照片删除的时候,后端提供了一个post接口,需要前端将数据转化成form data.而在angularjs中,如果直接用pos ...

  4. java request payload_前后端联调之Form Data与Request Payload,你真的了解吗?

    前言 做过前后端联调的小伙伴,可能有时会遇到一些问题.例如,我明明传递数据给后端了,后端为什么说没收到呢?这时候可能就会就会有小伙伴陷入迷茫,本文从chrome-dev-tools(F12调试器)中看 ...

  5. Ajax 通过 Request Payload 体发送 JSON 数据体

    为什么80%的码农都做不了架构师?>>>    AJAX POST 发送数据有2种方式: Form Data 和  Request Payload . Form Data 是我们大家 ...

  6. vue axios POST请求中参数以form data和request payload形式的原因

    HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value& ...

  7. 获取referer中的请求参数_Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法...

    本文实例讲述了Servlet获取AJAX POST请求中参数以form data和request payload形式传输的方法.分享给大家供大家参考,具体如下: HTTP请求中,如果是get请求,那么 ...

  8. form data和request payload的区别

    2019独角兽企业重金招聘Python工程师标准>>> HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: < ...

  9. AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式

    HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value& ...

最新文章

  1. 03构建之法阅读笔记之三
  2. [导入]用Javascript实现interface的类似功能
  3. java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)
  4. ABP源码分析三十六:ABP.Web.Api
  5. C# WindowService 动态修改服务名
  6. BGP router-id OSPF router-id 路由同步实验
  7. 如何在Android中设置铃声+震动
  8. python(源码包安装 基本使用 循环)
  9. 关于程序员面试时的智力题集锦
  10. Nginx 这一牛X的功能,你知道吗
  11. 写出python的基本语法规则_【Python基础】python基本语法规则有哪些-赵小刀的回答...
  12. 支付宝VS微信,谁在抄袭谁?
  13. 高等数学 - 两平面的夹角
  14. Windows 启动项被误删除,EFI分区误格式化恢复
  15. [AS3 狂想曲 K.07] BlazeDS 入门及配置 [FL 车在臣]
  16. matlab用imshow显示为纯白图像问题
  17. 短信与社交app的好处
  18. virtualenv virtualenvwrapper
  19. import上一级目录的模块(Python)
  20. 解决小米note5 安装了google play store 打不开的问题

热门文章

  1. 第五次课:Python 数据类型(一)
  2. linux下通过inotify-tools监控文件系统
  3. HttpServletRequest对象方法的用法(转)
  4. 看懂SqlServer查询计划
  5. exe4j中this executable was created with an evaluation错误解决方法
  6. 关于Android模拟器访问本地地址(转)
  7. clearcase 创建副本
  8. Web应用程序中(VS2005+SP1)添加App_Code(转)
  9. 常见的浏览器兼容性问题与解决方案——CSS篇
  10. JavaScript中的执行环境