我在下面附上了基本的
OAS 3.0
模式。使用 editor.swagger.io 时,在展开架构详细信息时,我可以在生成的页面中查看属性的默认值。
openapi: 3.0.3
info:
title: API Specification
version: 1.0.0
servers:
- url: https://localhost
paths:
/operation:
post:
operationId: run
requestBody:
description: Description
content:
application/json:
schema:
$ref: '#/components/schemas/Request'
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Response'
'400':
description: Bad request
'500':
description: Internal Server Error
components:
schemas:
Request:
type: object
properties:
x:
type: number
example: 0
default: 2
Response:
type: object
properties:
id:
type: integer
但是,当从编辑器顶部菜单中使用
spring
引擎生成服务器存根时,我注意到 defaultValue
注释的 @Schema
属性未填充。
// ...
@JsonProperty("x")
private BigDecimal x = new BigDecimal(2);
// ...
/**
* Get x
* @return x
**/
@Schema(example = "0", description = "")
@Valid
public BigDecimal getX() {
return x;
}
如您所见,生成的服务器类正确实例化了默认变量。 这确实是我缺少的
defaultValue
注释的属性 @Schema
。我已经看到这个属性被包含在 OAS 中的 @Parameter
对象中。
我想在上面的注释中看到的是附加属性,如下所示:
@Schema(example = "0", description = "", defaultValue="2")
这是spring引擎模板的bug吗?
如果我的问题有一个已知的解决方案并且需要较少的维护,我希望避免立即诉诸自定义胡子模板。
对这个问题进行一点调查
实际上你在生成的源中有两个问题:
生成的界面中的
@Parameter
注释生成得不太正确:
ResponseEntity<Response> run(@Parameter(in = ParameterIn.DEFAULT, description = "Description", required=true, schema=@Schema()) @Valid @RequestBody Request body);
如您所见,
schema
参数设置不正确。
@Schema
类中的
Request
注释没有 defaultValue
参数:@Schema(example = "0", description = "")
@Valid
public BigDecimal getX() {
return x;
}
org.openapi.generator
Gradle 插件(类似于 swagger codegen),结果是相同的:
schema
注释中的
@Parameter
参数:default ResponseEntity<Response> run(
@Parameter(name = "Request", description = "Description", required = true) @Valid @RequestBody Request request
) {
// ...
}
Request
类的代码是正确生成的:
x
字段被初始化为默认值。public class Request {
@JsonProperty("x")
private BigDecimal x = new BigDecimal(2);
// ...
}
你真的需要适当的注释吗?