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

时间:2018-10-02 02:18:25

标签: 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}]$'

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

1 个答案:

答案 0 :(得分: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模式中进行的操作。以下示例基于对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