OpenAPI 3.0.3中multipart/form-data数组参数格式异常求助
解决multipart/form-data数组元素被合并的问题
你遇到的问题是multipart/form-data请求里的数组被解析成了单个逗号分隔的字符串,核心原因是OpenAPI默认的数组序列化方式和服务端期望的不匹配。按以下步骤修改即可:
1. 调整OpenAPI的字段定义
- 把字段名从
'genreIds[]'和'languageIds[]'改成genreIds和languageIds,方括号后缀没必要,反而会干扰解析。 - 给数组字段添加
style: form和explode: true参数,明确告诉OpenAPI要生成重复的字段名(而非逗号分隔),这样服务端就能识别每个元素。 - 简化
genreIds的items定义,oneOf在这里是多余的,直接指定类型为string即可。
修正后的请求体代码:
requestBody: { content: { 'multipart/form-data': { schema: { type: 'object', properties: { email: { type: 'string' }, password: { type: 'string' }, confirmPassword: { type: 'string' }, fullName: { type: 'string' }, avatar: { type: 'string', format: 'binary' }, genreIds: { type: 'array', items: { type: 'string' }, style: 'form', explode: true }, languageIds: { type: 'array', items: { type: 'string', default: '' }, style: 'form', explode: true }, }, }, }, }, }
2. 确认服务端解析配置
如果服务端用的是Express+Multer这类工具,默认应该支持解析重复字段名的数组,但要确保没有额外配置把数组强制合并成字符串。比如Multer不需要特殊配置,就能把genreIds=1234&genreIds=55466解析成['1234', '55466']。
这样修改后,请求发送时会生成多个同名字段,服务端就能正确解析成独立的数组元素,得到你期望的结果。
内容的提问来源于stack exchange,提问作者Nhan Nguyen
相关产品推荐
相关产品推荐

