【发布时间】:2021-09-24 14:39:57
【问题描述】:
springdoc-openapi 库会在生成的 OpenAPI 文档中自动将某些属性标记为 required。例如,注释为 @NotNull 的属性将包含在生成的 YAML 文件的必需属性列表中。
库不做的一件事是将可选属性标记为nullable: true。但是,默认情况下,Spring Boot 应用程序将在请求中接受 null 并在可选属性的响应中返回 null。这意味着 OpenAPI 文档和端点的行为之间存在差异。
手动将任何单个属性标记为可以为空是微不足道的:只需将@Schema(nullable = true) 添加到字段或访问器即可。但是,在具有多个属性的大型模型中,我宁愿以与required 属性相同的方式自动确定它。也就是说,如果不需要该属性,我希望它是nullable,反之亦然。
如何在 springdoc-openapi 生成的 OpenAPI 文档中将我的可选属性标记为 nullable: true?
示例
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.NotNull;
public class RequiredExample {
@NotNull
private String key;
private String value;
public String getKey() { return key; }
public void setKey(String key) { this.key = key; }
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
生成的 OpenAPI 文档:
"components": {
"schemas": {
"RequiredExample": {
"required": [
"key"
],
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
所需的 OpenAPI 文档:
"components": {
"schemas": {
"RequiredExample": {
"required": [
"key"
],
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
"nullable": true
}
}
}
}
}
【问题讨论】:
-
我也有同样的问题。你找到解决办法了吗?你也知道为什么
"nullable": true没有被设为可选属性的默认值吗? -
@Snackoverflow 我没有找到任何内置的东西,所以我一直在使用
OpenApiCustomizer方法。而且我不知道他们为什么决定让事物默认为空。 -
这对 Kotlin 来说特别有趣,因为你有明确的可空或不可空类型。事实证明,如果你有一个可为空的属性,那么 springdoc-openapi 使它成为可选的(不是必需的)但仍然不能为空。因此,根据架构,您可以从 JSON 中省略该属性,但您可能没有它的值
null。到目前为止,我仍然不确定这是有意的还是错误的。网上还真没找到解释。
标签: java spring spring-boot openapi springdoc