axios 参数传入JSON数组,解析格式错误

传入格式是 [{},{}]正确的,下图
image.png

但是到接口里解析就成了这样下图
image.png

请问这个问题什么导致的,怎么解决呢

封装的代码


// request interceptor
request.interceptors.request.use(config => {
  if (!config.headers['Content-Type']) {
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    config.data = qs.stringify(config.data)
  }
  return config
}, errorHandler)

想得到的格式
image.png

阅读 3.6k
2 个回答

image.png

看请求标头,你这里上传的请求体格式是 application/x-www-form-urlencoded 表单格式的,axios 按此序列化是对的。

如果你要上传 JSON 格式的,这里应该是 application/json。

不过默认来说就是 JSON 的才对,除非你改了 Content-Type 或者手动序列化了 data(比如用了 qs 库)。这个得看你是咋封装的了,关键代码你没贴出。


【补充回答】

function formatData(obj) {
    const res = {};

    Object.keys(obj).forEach(key => {
        if (Object.prototype.toString.apply(obj[key]) === '[object Object]') {
            res[key] = JSON.stringify(obj[key]);
        } else {
            res[key] = obj[key];
        }
    });

    return res;
}

let data = {
    num: 0,
    str: 's',
    bflag: true,
    obj: {
        key: 'value'
    },
    arr: [
        {
            key: 'value'
        }
    ]
};

let qs = Qs.stringify(formatData(data));

console.log(qs);

image.png

import qs from 'qs'

paramsSerializer(params) {
return qs.stringify(params, { arrayFormat: 'indices' })
}

推荐问题