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

如何在Swagger的formData字段中传递字符串数组避免被解析为字符串?

解决方案

1. 修正Swagger参数配置

你当前的配置缺少array类型必备的items字段,以及控制数组传参格式的collectionFormat字段,修改参数配置如下:

"parameters": [
  {
    "name": "targetUniversity",
    "in": "formData",
    "type": "array",
    "items": {
      "type": "string"
    },
    "collectionFormat": "multi",
    "description": "University ID in array []- from DD"
  },
  {
    "name": "targetBusinessType",
    "in": "formData",
    "type": "array",
    "items": {
      "type": "string"
    },
    "collectionFormat": "multi",
    "description": "Business type (string - name) in array []"
  }
]

collectionFormat: multi 表示数组的每个元素会作为单独的同名form字段传递,而非拼接成单个字符串。items字段指定数组内元素的类型,是array类型参数的必填配置。

2. 确认后端Node.js的form-data解析配置

form-data格式不能用普通的express.json()或express.urlencoded()解析,需要使用multer中间件处理:

  • 先安装multer:npm install multer
  • 路由中配置multer解析:
const multer = require('multer');
// 不需要上传文件的场景用none(),有文件上传用对应的diskStorage等配置
const upload = multer().none();

app.post('/announce', upload, (req, res) => {
  // 此时req.body.targetUniversity就是数组格式
  console.log(req.body.targetUniversity);
})

3. 非SwaggerUI调用的前端传参注意事项

如果是自己写前端代码调用接口,不要将数组转成JSON字符串传入单个form字段,要遍历数组逐个append同名字段:

const formData = new FormData();
const universityIds = ['613e3ecfefa725074cb17968', '613e3ecfefa725074cb17969'];
universityIds.forEach(id => {
  formData.append('targetUniversity', id);
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:27:02