我有一个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'
但是,这对我不起作用,因为我想重用枚举,否则我将不得不在多个地方重复。
2条答案
按热度按时间mzmfm0qo1#
由于这只是一个解决方案,我不确定我是否可以确认这是否是一个答案,我不会将其标记为接受的答案。这样,我认为它仍然会为那些找到正确方法的人开放,或者更好的方法来实现期望。
问题出在
$ref
上。众所周知,$ref
的兄弟在OpenAPI V2.0中被忽略。因此,一旦使用$ref
,就不可能再强制执行任何进一步的约束。对于我的特定用例,因为我想重用我的枚举定义,所以我使用了V2.0文档中定义的YAML Anchors。尽管枚举定义在每个POJO中重复,但管理起来并不那么麻烦,至少目前是这样。我提出的实现如下。
还必须注意,在这种情况下,枚举值不能使用数组语法定义(即,
['ALPHA', 'BRAVO', 'UNKNOWN']
),因为当你尝试使用YAML锚时,它会违反YAML语法规则。fumotvh32#
OpenAPI 3.1支持
default
和$ref
,例如使用OpenAPI 3.0,您可以使用
allOf
,例如