当前位置: 首页 > 知识库问答 >
问题:

打开API规范V2。0-枚举类型字段的默认值

史懿轩
2023-03-14

我在Swagger V2中有一个API规范的请求主体。0,如下所示。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      $ref: '#/definitions/StatusEnum'

  StatusEnum:
    type: string
    enum: ['ALPHA', 'BRAVO', 'UNKNOWN']

现在,我希望StatusObject.status在默认情况下具有值UNKNOWN,如果它不是从客户端设置的。我试图实现这一点如下,但没有运气。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      $ref: '#/definitions/StatusEnum'
      default: 'UNKNOWN'

  StatusEnum:
    type: string
    enum: ['ALPHA', 'BRAVO', 'UNKNOWN']

我还尝试过使用”#/definitions/StatusEnum。未知“,再次无效。也对文档进行了梳理,但没有找到进一步的内容。我错过了什么?

我试图实现的是为这个属性设置一个默认值status。当枚举在以下行中定义时,此操作有效。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      type: string
      enum:
        - 'ALPHA'
        - 'BRAVO'
        - 'UNKNOWN'
      default: 'UNKNOWN'

但是,这对我不起作用,因为我希望重用枚举,否则我将不得不在多个地方重复。

共有1个答案

贲铭
2023-03-14

由于这只是一个解决办法,我不确定是否可以确认这是否是一个答案,我不会将其标记为已接受的答案。这样的话,我认为对于那些找到正确的方法或者更好的方法来实现期望的人来说,它仍然是开放的。

显然,问题出在$ref上。众所周知,$ref的同级在OpenAPI V2中被忽略。因此,一旦您使用$ref,就不可能强制执行任何进一步的约束。

对于我的特定用例,因为我想重用我的枚举定义,所以我使用了V2中定义的YAML锚。0个文档。尽管枚举定义在每个POJO中重复,但管理起来并不是一件很头痛的事,至少目前是这样。我提出的实现如下。

"/uri/path":
  ...
  parameters:
    - in: body
      ...
      schema:
        $ref: '#/definitions/StatusObject'

definitions:
  StatusObject:
    status:
      enum: *STATUS_ENUM # Referencing the anchor
      default: 'UNKNOWN'

  StatusEnum:
    type: string
    enum: &STATUS_ENUM # This is the anchor
      - 'ALPHA'
      - 'BRAVO'
      - 'UNKNOWN'

还必须注意的是,这种情况下的枚举值不能使用数组语法(即['ALPHA','BRAVO','UNKNOWN'])定义,因为当您尝试在其旁边使用YAML锚时,它会破坏YAML语法规则。

 类似资料:
  • 问题内容: 我们有一个带有枚举字段-的实体,我们想使用JPA注释-为它设置默认值。 但是,当我们将实体保存到数据库时,此字段的值为和。对于布尔字段- 正确的默认值()已保存。 如果改为使用:,则会在保存时得到以下异常: 我们做错了什么?为什么它仅适用于布尔值? 问题答案: 当某些SQL代码在未为emailCommunicationStatus列指定任何值的情况下插入一行时,您所做的工作很有用。在这

  • 问题内容: 通常,在switch语句中不需要默认值。但是,在以下情况下,仅当我取消注释默认语句时,代码才能成功编译。有人可以解释为什么吗? 问题答案: 您必须取消注释的原因是您的函数说它返回一个,但是如果您只为定义了标签,那么如果您传入其他任何内容,该函数将不会返回值。Java要求所有声明它们返回值的函数实际上在所有可能的控制路径上都返回一个值,并且在您的情况下,编译器不确信所有可能的输入都返回了

  • 我的JPA实体作为枚举字段 哪里 如果我用规范添加where条件 将枚举包含到规范查询中的正确方法是什么?

  • 我有一个打开的api yaml文件如下。我想分配空字符串值作为默认字符串类型属性。做这件事的方法是什么

  • 例如,我如何做类似的事情: 结果示例: