You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Axios至1.6.2后GET请求params格式异常,如何恢复旧格式?

解决Axios升级后params参数格式兼容旧版的问题

Axios从0.27.x升级到1.x版本后,默认的params序列化逻辑发生了变更(比如数组、嵌套对象的参数格式处理),要保留旧版格式,可通过以下方案解决:

方案1:自定义params序列化器复用旧版逻辑

Axios 1.x支持自定义paramsSerializer,直接复用0.27.x版本基于qs库的序列化逻辑即可:

  1. 先确保项目安装了qs库(若未安装):
npm install qs
  1. 创建Axios实例时配置序列化规则:
import axios from 'axios';
import qs from 'qs';

const axiosInstance = axios.create({
  paramsSerializer: (params) => {
    return qs.stringify(params, {
      arrayFormat: 'brackets', // 恢复旧版数组参数格式,如`ids[]=1&ids[]=2`
      encodeValuesOnly: true, // 与旧版编码行为对齐
    });
  },
});

方案2:修改全局Axios配置

如果不需要单独创建实例,可直接修改全局默认配置:

import axios from 'axios';
import qs from 'qs';

axios.defaults.paramsSerializer = (params) => {
  return qs.stringify(params, {
    arrayFormat: 'brackets',
    encodeValuesOnly: true,
  });
};

排查配置未生效的常见原因

  • 配置格式错误:Axios 1.x的paramsSerializer支持直接传入函数,若用对象格式需确保包含serialize方法;
  • 实例配置覆盖:若先创建实例再修改全局defaults,实例不会继承后续配置,需直接修改实例的defaults;
  • 请求级配置冲突:检查是否有个别请求单独设置了paramsSerializer,覆盖了全局/实例配置。

验证方法

发送带数组或嵌套对象的GET请求,检查URL参数格式是否与旧版一致:

axiosInstance.get('/demo', {
  params: {
    ids: [1, 2, 3],
    user: { name: 'test', age: 20 }
  }
});

配置生效后,参数应呈现旧版格式:/demo?ids[]=1&ids[]=2&ids[]=3&user[name]=test&user[age]=20

内容的提问来源于stack exchange,提问作者HartleySan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:36:02