如何在Swagger中让对象属性支持多种数据类型?
解决Swagger/OpenAPI中属性支持多类型的问题
嘿,我来帮你搞定这个API定义的问题!你想要让propertyName支持整数、字符串、布尔三种类型的思路是对的,不过可能是版本兼容性或者写法细节的问题导致你的oneOf配置没生效,我给你分两种情况说明正确的写法:
如果你用的是OpenAPI 3.x(Swagger 3.0及以上版本)
oneOf是OpenAPI 3.x才支持的关键字,你的写法本身没问题,但需要确保你的API定义开头声明了正确的版本。另外如果遇到工具兼容性问题,可以试试用anyOf(和oneOf的区别是,anyOf允许值匹配多个类型,而oneOf要求值只能匹配其中一种,前者在部分旧工具上兼容性更好)。
正确的示例代码:
openapi: 3.0.3 components: schemas: NameValue: type: "object" required: - "propertyName" properties: propertyName: # 若需要严格互斥类型匹配,将anyOf替换为oneOf即可 anyOf: - type: "integer" - type: "string" - type: "boolean"
如果你用的是Swagger 2.0(OpenAPI 2.0)
Swagger 2.0并不支持oneOf/anyOf这类关键字,这时候要直接用type数组来声明多种支持的类型:
正确的示例代码:
swagger: "2.0" definitions: NameValue: type: "object" required: - "propertyName" properties: propertyName: type: ["integer", "string", "boolean"]
你可以检查一下自己使用的Swagger/OpenAPI版本,对应上面的写法调整后应该就能生效啦!
内容的提问来源于stack exchange,提问作者EvanL00
相关产品推荐
相关产品推荐

