Swagger UI中multipart/form-data请求如何正常展示复杂对象属性?
问题原因
OpenAPI 3.0.1版本对multipart/form-data请求体中的嵌套对象序列化规则没有明确的规范约束,低版本Swagger UI默认会将复杂对象类型的表单字段识别为单个整体字段,不会自动展开其内部的子属性,因此只能看到address字段本身,无法显示street、city等子属性。
解决方法
- 方案1:升级依赖版本
将Swagger UI升级到3.38.0及以上版本,同时将OpenAPI规范版本升级到3.0.3及以上,该版本组合默认支持自动展开multipart/form-data中的嵌套对象属性,无需修改原有请求体定义即可正常展示子字段。 - 方案2:添加encoding字段明确序列化规则
如果无法升级工具版本,可以在multipart/form-data的配置下新增encoding配置,明确指定address字段的序列化格式为JSON,配置示例如下:requestBody: content: multipart/form-data: # Media type schema: # Request payload type: object properties: # Request parts media: # Part 1 (string value) type: string address: # Part2 (object) type: object properties: street: type: string city: type: string profileImage: # Part 3 (an image) type: string format: binary # 新增以下encoding配置 encoding: address: contentType: application/json - 方案3:扁平化表单字段
如果后端服务支持直接接收扁平化的表单参数,可以将street、city字段从address对象中提取为根级表单属性,避免使用嵌套对象结构,即可在Swagger UI中正常展示所有字段。

内容的提问来源于stack exchange,提问作者Pez
相关产品推荐
相关产品推荐

