标签 paramsSerializer 下的文章

后端出了个接口(GET),文档写着入参是一个 ids,类型是 array[string]

前端按照文档,传入一个数组作为参数:

复制
getList() {
  this.$http({
    url: 'findList',
    params: {
      ids: [123, 124, 125]
    },
    method: 'get'
  }).then((res) => {})
}

请求报 400,原因是 get 请求数组类型的参数,会被 qs 自动处理成这种格式:
http://xxx/xxx?ids[]=123&ids[]=124&ids[]=125

于是我换成字符串入参试一下
http://xxx/xxx?ids=123,124,125
请求成功

我以为是接口文档写错了,就跑去问后端,入参类型要不要改成 String,备注打上“多个 id 用,分割”
后端表示没写错,甩了个 curl,入参是 array[string]可以请求成功,我对比了一下,区别在这:
==报 400==:http://xxx/xxx?ids[]=123&ids[]=124&ids[]=125
==正常==:http://xxx/xxx?ids=123&ids=124&ids=125

如果要按照数组入参,前端需要做特殊处理:

复制
getList() {
  this.$http({
    url: 'findList',
    params: {
      ids: [123, 124, 125]
    },
    method: 'get',
    // 处理 ⬇️
    paramsSerializer: function (params) {
      return Qs.stringify(params, { arrayFormat: 'repeat' })
    }
  }).then((res) => {})
}

前端感觉没必要
问后端文档入参类型能不能改成 String,防止后面时间久了业务忘了,看文档和代码对不上
后端表示要改前端自己改
前端就去改了

过了一会儿后端问前端:“你怎么这么执着”

0

1

2

image

个人感觉这种入参http://xxx/xxx?ids=123&ids=124&ids=125本身就很诡异
前端感觉对线没对好doge_flower
晚点移黑洞