基于另一个字段验证一个字段的长度的Json模式验证

3

我有一个JSON Schema,其中有两个字段:fieldA和fieldB,fieldA是枚举类型,fieldB是字符串。我想根据fieldA的值对fieldB的长度进行一些验证。

properties:
  fieldA:
    enum:
      - VAL1
      - VAL2
      - VAL3
  fieldB:
     type: string
      pattern: '^[<a-z>{10}|<a-z>{5}]$'

我希望验证如果fieldA等于VAL1,则fieldB的长度应该为5,否则fieldB的长度应该为10。如何添加这样的验证检查?


为什么这个被标记为"Swagger"?你需要一个OpenAPI(Swagger)解决方案还是一个纯JSON Schema解决方案? - Helen
Swagger是我正在寻找的东西。 - user2962885
1个回答

5
答案取决于您使用的是OpenAPI 2.0 (swagger: '2.0') 还是 OpenAPI 3.0 (openapi: 3.0.0)。
OpenAPI 2.0 不支持条件依赖。您只能在 description 中口头描述此类依赖关系。
在 OpenAPI 3.0 中,您可以使用 oneOf 来描述条件依赖关系,类似于在 JSON Schema 中所做的方式。下面的示例基于JSON schema conditional dependency on value中的答案。
请注意,虽然 oneOf 是 OpenAPI 规范的一部分(也就是说,您可以编写包含oneOf的 API 定义),但对于oneOf的实际工具支持可能会有所不同。
type: object
required:
  - fieldA
properties:
  fieldA:
    type: string
    enum:
      - VAL1
      - VAL2
      - VAL3
  fieldB:
    type: string
    pattern: '^[a-z]+$'
oneOf:
  # If fieldA = VAL1, then fieldB must be 5 chars long
  - properties:
      fieldA:
        enum: [VAL1]
      fieldB:
        minLength: 5
        maxLength: 5
  # Otherwise (if fieldA = VAL2 or VAL3) fieldB must be 10 chars long
  - properties:
      fieldA:
        enum: [VAL2, VAL3]
      fieldB:
        minLength: 10
        maxLength: 10

1
如何比较一个字段是否小于另一个字段,例如 min < max - Alok Kumar Singh
1
@AlokKumarSingh OpenAPI不支持这个功能。 - Helen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接