axios发送post数据后台收不到_使用axios post 提交数据,后台获取不到

https://www.cnblogs.com/yiyi17/p/9409249.html(copy

https://www.cnblogs.com/loveyaxin/p/8385694.html(copy

问题场景

场景很简单,就是一个正常 axios post 请求:

axios({

headers: {

'deviceCode': 'A95ZEF1-47B5-AC90BF3'

},

method: 'post',

url: '/api/lockServer/search',

data: {

username,

pwd

}

})

后台说没有接收到你的传参。

这就有点奇怪了,我看了一下浏览器的请求信息是 OK 的,参数都是有的,而且之前这样用 axios 也没有这个问题。

但是这个接口是通用的,别人都用了,是 OK 的,接口没问题。

问题原因

要点1

原因就是这次的接口使用 java spring mvc

并且在这个方法上使用了注解 @RequestParam

那么这个是什么意思呢,这个是只能从请求的地址中取出参数,也就是只能从 username=admin&password=admin这种字符串中解析出参数。

要点2

我们还可以看到我们这次请求的 Content-Type:

application/json;charset=UTF-8

关于这一点需要说明的是:

1、axios会帮我们 转换请求数据和响应数据 以及 自动转换 JSON 数据

2、在 axios 源码中发现下面这段内容:(很关键)

 

我们知道在做 post 请求的时候,我们的传参是 data: {...} 或者直接 {...} 的形式传递的,嗯,就是下面这两种形式

【第一种形式】

【第二种形式】

非常的刺激,这两种形式无一例外都触发了 axios 源码中【很关键】的那一段代码

问题分析

也就是说,我们的 Content-Type 变成了 application/json;charset=utf-8

然后,因为我们的参数是 JSON 对象,axios 帮我们做了一个 stringify 的处理。

而且查阅 axios 文档可以知道:axios 使用 post 发送数据时,默认是直接把 json 放到请求体中提交到后端的。

那么,这就与我们服务端要求的 'Content-Type': 'application/x-www-form-urlencoded' 以及 @RequestParam 不符合。

解决方案

解决方案一

【用 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 不就可以了吗,(#^.^#) 【他说我才不改呢】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在JDK 8中连接字符串

JDK 8引入了语言功能,例如lambda表达式 , 流 ,甚至是新的Date / Time API ,这些都会改变我们编写Java应用程序的方式。 但是,还有一些新的API和功能可能不太“改变游戏规则”,但仍为Java编程语言带来了更大…

华为内部面试题库---(6)

1.在SMP体系结构中,中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行,下列说法错误的是:A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件,通过设置CPU位掩码&#x…

基元需要走吗?

我目前正在使用JSF作为视图技术,使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西,但令我震惊:是否有充分的理由在企业应用程序中使用原语? 当我开始围绕J2SE 1.2使用Java进行编程(或者是J…

输入参数_太实用!输入参数1秒算出功率,这款计算工具又快又准

随着互联网红利的不断加深,到了后期,不断地各种工具开始涌现,方便了很多用户,填补了市场上的很多空白,有生活娱乐类、提高效率类、垂直专业类、系统工具类等等。工业行业作为各行各业的大头,机械化、智能化…

功能工厂模式

您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas相当满意,那么您只需阅读标题就可以做到这一点。 如果您是其中之…

指向二维数组的指针测试

定义a为二维数组后,有三种成份:数组本身、3个一维数组(a的每一行对应一个一维数组)、12个数组元素, 由此就有三种指针及对应的指针变量, &a和int (*p1)[3&#xff3d…

python视频流传输_基于OpenCV的网络实时视频流传输的实现

很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时,大家又希望能够随时随地观看视频直播。大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它们具有更高的分辨率并降低了布线成本。在本文中,…

如何编写NetBeans插件

是否想在NetBeans IDE中添加功能或自动执行某些操作? 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 ,创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句,并在…

单机最大tcp连接数

单机最大tcp连接数 网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前&#xf…

用了fastapi还需要nginx_nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。...

nginx 与 fastdfs 的配置过程,已经越过了许多坑,我跪着进入了欢迎页面。。。上面的是 fastdfs 与 nginx 的官网,我从这里面跌跌撞撞的走出来了,下面是我总结出来的一条平坦的路,小伙伴们可以参考参考。我下面的攻略其实…

Spring Batch教程–最终指南

这是Spring批处理教程,它是Spring框架的一部分。 Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管…

Neurocomputing 投稿注意事项

1. *.tex 和 *.bib 都以Manuscript项(Item)提交 (abstract.tex除外)2. abstract.tex以Abstract项(Item)提交3. *.eps以Figure项(Item)提交4. biographies.pdf以Biography of the aut…

箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...

导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。没有可信的数据,数据挖掘构建的模型将是空中楼阁。数据质量分析的主要任务是检查原始数据中是否存在脏数据…

[编程相关]正则表达式Regex语法

--目录-- 0. 前言1. 正则语法2. 正则搜索语法(1)字符集 Character_Classes(2)锚定符 Anchors(3)计数 Quantifiers(4)分组与索引 Group_And_Reference(5)周围 …

窗口程序ImageView(仿QQ图片查看器)

近期一直在学习窗口程序之类的问题,下午正好有机会和大家讨论一下. 程序运行截图: 应用方法: 1、直接把图像文件拖到图标上表现 2、通过命令行方式,示例:ImageView.exe "带全路径的图像文件名称" 3、打开ImageView.exe&…

华为硬件工程师社招机考题库_干货:2016年华为中兴硬件工程师笔试题目与经验...

1。一位工科男在拿到华为实习生offer后的面经干货某211学校,机械学院研究生。不得不说一下,华为的员工们真的是认真做事,因为怕我们担心下班轮不到面试。工作人员特意去休息区告诉我们,不面试完他们不会下班,果然是个爱…

USACO3.15stamps(dp)

对dp很无奈。。枚举所有可能达到的值 dp[i]表示到达i值所用最少的邮票 1 /*2 ID: shangca23 LANG: C4 TASK: stamps5 */6 #include <iostream>7 #include<cstdio>8 #include<cstring>9 #include<stdlib.h> 10 #include<algorithm> …

thinkcmf搭建教程_5分钟快速入门

# 5分钟快速入门[TOC1,5]## 1.创建模板目录在public/themes/目录下创建quick_start目录## 2.添加模板描述文件在public/themes/quick_start目录下创建manifest.json文件&#xff0c;内容如下&#xff1a;{"name": "quick_start","version": &quo…

WAV格式

查看下面文章时,请用记事本打开一个wav格式的文件. WAV格式是微软公司开发的一种声音文件格式&#xff0c;也叫波形声音文件&#xff0c;是最早的数字音频格式&#xff0c;被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法&#xff0c;支持多种音频位数、采样频率和…

基于价值的类

在Java 8中&#xff0c;某些类在Javadoc中有一个小注释&#xff0c;说明它们是基于值的类 。 其中包括简短说明的链接&#xff0c;以及有关不使用它们的限制。 这很容易被忽略&#xff0c;如果这样做&#xff0c;则可能会在将来的Java版本中以微妙的方式破坏代码。 为了避免这种…