【问题标题】:Json schema validating length of one field based on another field基于另一个字段的 Json 模式验证一个字段的长度
【发布时间】:2018-10-02 02:18:25
【问题描述】:

我有一个包含两个字段的 JSON 模式。 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 解决方案?
  • Swagger 是我想要的。

标签: json swagger


【解决方案1】:

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

OpenAPI 2.0

OpenAPI 2.0 不支持条件依赖。您只能在description 中口头记录此类依赖关系。

OpenAPI 3.0

您可以使用oneOf 来描述 OpenAPI 3.0 中的条件依赖,类似于您在 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

【讨论】:

  • 如何比较一个字段小于其他字段,比如 min
  • @AlokKumarSingh OpenAPI 不支持这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2021-06-29
相关资源
最近更新 更多