如果所有父变量都标记为必需,如何使子模型中不需要的父模型变量?

时间:2019-01-07 17:26:46

标签: swagger swagger-ui swagger-2.0 swagger-codegen swagger-editor

我有一个父定义,该子定义使用allOf关键字由子定义扩展。由于我已经在父模型中将所有变量标记为必需,因此在子模型中也将其标记为必需。但是我需要父变量标记为不需要。有什么想法吗?

definitions: 
  Parent:
    type: "object"
    required:
      - "id"
    properties:
      id:
        type: "integer"
        format: "int64"
        minimum: 1
        example: "123456"        

  Child:
    allOf:
      - $ref: "#/definitions/Parent"
    type: "object"
    required: 
      - "sample"
    properties:
      sample:
        type: "string"
        format: "full-date"
        example: "2001/12/31"

1 个答案:

答案 0 :(得分:0)

您不能在子模型中取消要求父模型的字段。解决方法是定义一个具有可选属性的基本模型,例如ParentBase,并从该模型继承ParentChild

definitions:
  ParentBase:
    type: object
    properties:
      id:
        type: integer
        format: int64
        minimum: 1
        example: 123456

  Parent:
    allOf:
      - $ref: "#/definitions/ParentBase"
      - required:
          - id

  Child:
    allOf:
      - $ref: "#/definitions/ParentBase"
      - type: object
        required: 
          - sample
        properties:
          sample:
            type: string
            format: full-date
            example: "2001/12/31"


与此无关,id属性定义为整数,但其示例值是字符串。这是错误的-示例数据类型应与属性类型匹配。您需要使用123456不带引号。

id:
  type: integer
  #example: "123456"  # Wrong
  example: 123456     # Correct