序列化paramsSerializer的使用

在vue项目中,封装axios的get方法时,需要用到paramsSerializer

1、当传参为数组时,默认的传参数据,控制台的payload中的数组key名称后边会多一个[],例如传参ids: [1,2,3],解析出来的是在这里插入图片描述

如果需要去掉中括号,就需要使用到paramsSerializer
如下

import axios from 'axios';
import qs from 'qs'// 引入qs
const axios_ = axios.create({
    
    
  baseURL: config.baseURL,
  timeout: 60000, // 请求时间超过60秒视为超时
  withCredentials: true,
  headers: {
    
    
    'X-Requested-With': 'XMLHttpRequest'
  },
  paramsSerializer(params) {
    
    
    return Qs.stringify(params, {
    
     arrayFormat: 'repeat', allowDots: true });
  }
});


或者针对某一个get请求来设置

axios.get(url,{
    
    
	 params, 
	 paramsSerializer(params) {
    
    
	    return Qs.stringify(params, {
    
     arrayFormat: 'repeat', allowDots: true });
	  }
}).then(res => {
    
    }).catch(err => {
    
    })
2、对于传时间参数时,如‘2023-01-01 12:00:00’,如果没有配置paramsSerializer,中间的空格,会被解析成+

在这里插入图片描述
payload中是正常的,但是自动拼接到url后,空格就变成了+,会导致调用接口失败,报400。此时,需要后台特殊处理,或者前端配置paramsSerializer。
配置paramsSerializer后,空格就会被编码成%20
在这里插入图片描述
此时调用接口就正常了

猜你喜欢

转载自blog.csdn.net/qq_36877078/article/details/130226595
今日推荐