Open API Spec V2.0 - Enum类型字段的默认值



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

"/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.UNKNOWN',再次不起作用。我把文件也翻了一遍,但找不到更多的东西。我错过了什么?

对已标记副本的响应

我想要实现的是为这个属性status设置一个默认值。当枚举按如下方式在行中定义时,此方法有效。

"/uri/path":
...
parameters:
- in: body
...
schema:
$ref: '#/definitions/StatusObject'
definitions:
StatusObject:
status:
type: string
enum:
- 'ALPHA'
- 'BRAVO'
- 'UNKNOWN'
default: 'UNKNOWN'

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

因为这只是一个解决方案,我不确定我是否可以确认这是否是一个答案,我不会将此标记为接受的答案。这样的话,我认为它仍然是开放的,只要有人找到了正确的方法,或者更好的方法来实现期望。

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

对于我的特定用例,因为我想重用我的enum定义,所以我使用了V2.0文档中定义的YAML anchor。尽管枚举定义在每个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语法规则。

最新更新