axios 分post 和 get请求
get 数据使用params 传递传递数据
post使用 data传递数据,使用params不会报错,但是数据在url上。
post传递数据的问题:
数据问题是因为axios 默认是application/json,所以,如果后端解析json,那么就没有问题,比如@RequstBody,但是还是建议配置。因为一般使用的是application/x-www-form-urlencoded
解决办法使用axios 自带的请求处理配置,具体实现参考后文,这个方法返回的字符串会原文写入请求体,符合格式就可以。为了验证,手写了一个文件上传,用下面的方法实现,参考其它博文。
transformRequest: [function (data) {return }] //记得对key 和 value 要encodeurl
比如默认json,请求体如下
{a:b}
application/x-www-form-urlencoded格式请求体如下
a=b
解决方法
①数组格式问题,格式不对,如果传递数组,添加配置,qs为axios自带,直接导入即可,后面方法都能解决
paramsSerializer: datas => {
return qs.stringify(datas, { indices: false })
},
②普通数据格式问题(注:post请求必须如下配置),一般表现为后端获取不到数据。f12发现格式不对,reploy而不是formdata,即使是formdata 格式也不对。
解决办法如下(选择一种即可):
1、使用FromData对象,FromData的append 添加数据。再直接传递给data
data:fromData
2、参考某位大神的博客,添加配置
transformRequest: [function (data) {
// Do whatever you want to transform the data
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
3、其它如FromData 一样的对象。