get 请求传递参数类型为数组或者对象的处理

问题:
get 请求传递参数的类型为数组或对象时,请求会报错。

/list?pageNum=1&pageSize=10&params=%7B%22beginCreateTime%22:%22%22,%22endCreateTime%22:%22%22,%22beginUpdateTime%22:%22%22,%22endUpdateTime%22:%22%22%7D

解决方式:
== 引用qs插件,在axios配置
vue 方式:安装Qs插件命令:npm install qs
在 request拦截器 页面引入
import Qs from ‘qs’

// request拦截器
service.interceptors.request.use(config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  //只针对get方式进行序列化
  if (config.method === 'get') {
    config.paramsSerializer = function(params) {
      return Qs.stringify(params, { arrayFormat: 'indices' })
    }
  }
  return config
}, error => {
    console.log(error)
    Promise.reject(error)
})

qs 插件参数说明

1、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 输出结果:'a[0]=b&a[1]=c'
2、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 输出结果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 输出结果:'a=b&a=c'
4、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
// 输出结果:'a=b,c'

示例入参为params对象
get 请求传递参数类型为数组或者对象的处理

参考:https://www.cnblogs.com/kingreatwill/p/12641238.html#/cnblog/works/article/12641238

上一篇:JS 判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等


下一篇:关于Axios请求JavaWeb(SpringMVC)参数接收问题