axios利用post提交数据,服务端无法接收到

解决方案,引用qs模块,即可,将post提交的数据转为参数的形式提交给后端

解决方案

解决方案一

【用 URLSearchParams 传递参数】

let param = new URLSearchParams()
param.append('username', 'admin')
param.append('pwd', 'admin')
axios({
    method: 'post',
    url: '/api/lockServer/search',
    data: param
})

需要注意的是: URLSearchParams 不支持所有的浏览器,但是总体的支持情况还是 OK 的,所以优先推荐这种简单直接的解决方案

解决方案二

网上有很多方案说使用

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

或者

{headers:{'Content-Type':'application/x-www-form-urlencoded'}}

我试了一下,其实这样还是不行的
【还需要额外的操作,(我们要将参数转换为query参数)】
引入 qs ,这个库是 axios 里面包含的,不需要再下载了。

import Qs from 'qs'
let data = {
    "username": "admin",
    "pwd": "admin"
}

axios({
    headers: {
        'deviceCode': 'A95ZEF1-47B5-AC90BF3'
    },
    method: 'post',
    url: '/api/lockServer/search',
    data: Qs.stringify(data)
})

解决方案三

既然 axios 源码中有那么一段【很关键】的代码,那么,我们也可以通过修改 transformRequest 来达到我们的目的。

在 axios 的请求配置项中,是有 transformRequest 的配置的:

OK,那么现在我们的请求就可以写成下面这个样子了:

import Qs from 'qs'
axios({
    url: '/api/lockServer/search',
    method: 'post',
    transformRequest: [function (data) {
        // 对 data 进行任意转换处理
        return Qs.stringify(data)
    }],
    headers: {
        'deviceCode': 'A95ZEF1-47B5-AC90BF3'
    },
    data: {
        username: 'admin',
        pwd: 'admin'
    }
})

解决方案四

【重写一个 axios 实例,重新实现属于我们自己的 transformRequest】

import axios from 'axios'
let instance = axios.create({
    transformRequest: [function transformRequest(data, headers) {
        normalizeHeaderName(headers, 'Content-Type');
        if (utils.isFormData(data) ||
          utils.isArrayBuffer(data) ||
          utils.isBuffer(data) ||
          utils.isStream(data) ||
          utils.isFile(data) ||
          utils.isBlob(data)
        ) {
          return data;
        }
        if (utils.isArrayBufferView(data)) {
          return data.buffer;
        }
        if (utils.isURLSearchParams(data)) {
          setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
          return data.toString();
        }
        /*改了这里*/
        if (utils.isObject(data)) {
          setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
          let _data = Object.keys(data)
          return encodeURI(_data.map(name => `${name}=${data[name]}`).join('&'));
        }
        return data;
    }],
})

解决方案五

axios.post('/api/lockServer/search',"userName='admin'&pwd='admin'");

解决方案六

我们知道现在我们服务端同学接收参数用的是 @RequestParam(通过字符串中解析出参数)
其实还有另一种是 @RequestBody(从请求体中获取参数)。

我们让后端的同学改成 @RequestBody 不就可以了吗,(#.#) 【他说我才不改呢】

作者:Yu丶
来源:CSDN
原文:https://blog.csdn.net/csdn_yudong/article/details/79668655
版权声明:本文为博主原创文章,转载请附上博文链接!

参考:
https://blog.csdn.net/csdn_yudong/article/details/79668655

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 虽然喜欢传统戏曲曲艺,我却很少有时间去剧场看戏,最多不过是把自己喜欢的段子或者朋友推荐的视频下载下来,抽时间看看听...
    明O亮阅读 1,385评论 1赞 2
  • 天高任鸟飞 海阔任鱼游
    瞳瞳日中的微笑阅读 264评论 0赞 2
  • 一直用别人画的漫画当头像,总担心自己哪天出名了会被告侵权,所以还是动手自己画一张吧。 漫画人物还是比较好画的,不像...
    小错很不错阅读 1,191评论 0赞 1
  • 希望被肯定的人总是痛苦的。因为从没有哪一天真正为自己开心过。
    思尔we阅读 195评论 0赞 0

友情链接更多精彩内容