如何在OpenAPI 3.0中定义双属性同空/同非空约束?
用OpenAPI 3.0能不能实现prop3和prop4的联动约束?
完全可以实现,关键是通过oneOf关键字定义两种合法场景,让请求体必须符合其中一种要求。
具体修改后的定义
SomeEntity: description: description properties: prop1: nullable: true allOf: - $ref: '#/components/schemas/Field1' prop2: nullable: true allOf: - $ref: '#/components/schemas/Field2' prop3: nullable: true allOf: - $ref: '#/components/schemas/Field3' prop4: nullable: true allOf: - $ref: '#/components/schemas/Field4' oneOf: # 场景1:prop3和prop4同时为null - properties: prop3: const: null prop4: const: null # 场景2:prop3和prop4同时不为null(必须都存在且非空) - required: - prop3 - prop4 properties: prop3: nullable: false prop4: nullable: false
逻辑解释
oneOf的作用是限制请求体只能匹配下面两种情况中的一种:- 第一种场景用
const: null强制要求prop3和prop4的值都为null; - 第二种场景先通过
required指定prop3和prop4必须出现在请求体里,再设置nullable: false确保它们不能是null值。
- 第一种场景用
需要注意的是,不同的OpenAPI解析工具对关键字的支持可能有细微差别,实际使用前最好用目标工具测试验证一下兼容性。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

