浅析axios中post上传,后台接收不到参数

最近在用vue-element-admin这套模板,其中使用封装的http请求,post请求参数后台反馈接收不到

先说一下 HTTP content-type

Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因

Content-Type 标头告诉客户端实际返回的内容的内容类型

常见的媒体格式类型如下:

  • text/html : HTML格式
  • text/plain :纯文本格式
  • text/xml : XML格式
  • image/gif :gif图片格式
  • image/jpeg :jpg图片格式
  • image/png:png图片格式

以application开头的媒体格式类型:

  • application/xhtml+xml :XHTML格式
  • application/xml: XML数据格式
  • application/atom+xml :Atom XML聚合格式
  • application/json: JSON数据格式
  • application/pdf:pdf格式
  • application/msword : Word文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

另外一种常见的媒体格式是上传文件之时使用的:

  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

问题分析:

axios 文档提到:axios 使用 post 发送数据时,默认是直接把 json 放到请求体中提交到后端的

且axios使用post,axios 源码中 Content-Type 默认处理为 application/json;charset=utf-8 

而后台常见接收类型为 'Content-Type': 'application/x-www-form-urlencoded' 以及 @RequestParam注解

通讯参数不符合

之前在网络上查到的,修改headers的Content-Type类型,无果

解决方案:

引入qs库,使用stringify处理参数

qs.parse()将URL解析成对象的形式

qs.stringify()将对象序列化成URL的形式,以&进行拼接,这样后台可以通过@RequestParam获取到参数

JSON中同样存在stringify方法,但是两者之间的区别是很明显的,如下所示

// JSON
{"uid":"cs11","pwd":"000000als","username":"cs11","password":"000000als"}
// QS
uid=cs11&pwd=000000als&username=cs11&password=000000als

将参数序列化之后,上传参数后,后台接收正常

或者尝试与后台沟通,将@RequestParam修改为@RequestBody(从请求体中获取参数),来实现参数接收

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值