如何在Swagger中仅针对枚举部分值设置非必填?
解决方案
你无法直接为枚举中的单个值设置“非必填”属性,因为字段的必填性是针对整个字段而非字段取值。不过可以通过oneOf组合两种场景来实现你的需求:
- 场景1:必须提供
attrKey字段,且取值为枚举中的A、B、D(排除C) - 场景2:不提供
attrKey字段(对应你需要的“C值非必填”的情况)
修改后的主YAML Schema如下:
type: object oneOf: # 必须提供attrKey,且值为A/B/D - properties: attrKey: allOf: - $ref: '../schemas/MyEnum.yaml' - not: enum: [C] required: - attrKey # 不提供attrKey字段 - not: required: - attrKey additionalProperties: true
说明
- 第一个分支强制
attrKey存在,同时通过not规则排除了枚举中的C值,确保只能填入A、B、D - 第二个分支限制
attrKey不能出现在请求中,对应你希望C值可省略的场景 oneOf保证请求只会符合其中一种规则,避免逻辑冲突
内容的提问来源于stack exchange,提问作者Marek Bernád
相关产品推荐
相关产品推荐

