问题:对接过程中使用postMan或者其他工具在对接的时候发现请求中使用的是Request Payload,对于一个有工作经验但是没有主动去配置axios的来说,确实是需要查资料的,开发过程中与后端人员对接接口一直对接不成功,问题在于前端架构师没有配置。
问题现象:在开发过程中,我们请求一直如下图所示,请求方式有post和get,但我们请求的Content-Type一直是如下图所示的(Content-Type: application/x-www-form-urlencoded;charset=UTF-8),数据都是以form Data方式去请求。忽然一个接口 如下图二所示,Content-Type以application/json(Content-Type: application/json)形式去传,数据以Request Payload的形式来传,导致出现接口调试失败!
图一 formData形式传数据
图二 request Payload方式传数据
解决方法:
1,前端在请求接口的封装中,添加headers,如下所示,其中useRequestBody 是我自己封装的字段,param是一个对象
export function GetDataList (param) {
return request({
url: '/search/getRecomsByEs',
method: 'POST',
data:param,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
useRequestBody:true
})
}
2,在axios拦截器中进行修改,useRequestBody是自己封装的,如上代码
http.interceptors.request.use((config) => {
if (config.method === 'post') {
if(config.useRequestBody){
config.headers = {
'Content-Type': 'application/json;charset=UTF-8'
}
}else {
config.data = qs.stringify(config.data);
}
}else {
console.log("config====",config);
}
return config
}, (error) => {
console.log(error)
return Promise.reject(error)
})
最后,修改之后,请求成功