如何在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
相关产品推荐
相关产品推荐

