axios使用delete的坑
2019-10-09 本文已影响0人
猫尾草
1. 问题
在使用axios的delete请求的时候,将请求参数放在body里面,Content-Type
使用application/x-www-form-urlencoded
,后台springboot工程用@RequestParam
接收不到delete请求传来的参数。
2. 思考
原因1:springboot不具备自动封装delete请求的body的能力?
参考:https://www.jianshu.com/p/f0775b86ba98
以前确实是,现在已经具备了,并且使用postman也是可以正常接收参数的。排除这个可能。
原因2:前端使用的axios的问题?
检查发现之前的axios的delete请求都是伪装成post请求发送的:
export const deleteRequest = (url, params) => {
let data = params;
data['_method'] = "DELETE";
return axios({
method: 'post',
url: `${base}${url}`,
data: data,
params: data,
transformRequest: [function (data) {
let ret = '';
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
}
return ret.slice(0, -1);
}],
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
};
确定是axios的问题。
3. 解决方法
参考:https://blog.csdn.net/qq_42240485/article/details/100515839,要么像上面一样伪装成post,要么使用这里的对body参数做一次包装的方法。