Json 模式根据另一个字段验证一个字段的长度

use*_*885 3 json swagger

我有一个包含两个字段的 JSON 架构。fieldA和fieldB,fieldA是一个枚举,fieldB是一个字符串。我想根据 fieldA 的值对 fieldB 的长度添加一些验证。

properties:
  fieldA:
    enum:
      - VAL1
      - VAL2
      - VAL3
  fieldB:
     type: string
      pattern: '^[<a-z>{10}|<a-z>{5}]$'
Run Code Online (Sandbox Code Playgroud)

我想验证如果 fieldA 等于 VAL1,则 fieldB 的长度应为 5,否则 fieldB 的长度应为 10。如何添加此类验证检查?

Hel*_*len 5

答案取决于您使用的是 OpenAPI 2.0 ( swagger: '2.0') 还是 OpenAPI 3.0 ( openapi: 3.0.0)。

开放API 2.0

OpenAPI 2.0 不支持条件依赖。您只能在description.

开放API 3.0

您可以使用oneOfOpenAPI 3.0 来描述条件依赖关系,类似于在 JSON Schema 中的做法。下面的示例基于JSON 架构条件依赖 value的答案。

请注意,虽然oneOf是 OpenAPI 规范的一部分(例如,您可以编写包含 的 API 定义oneOf),但实际工具支持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
Run Code Online (Sandbox Code Playgroud)