springdoc-openapi库会根据生成的OpenAPI文档中的要求自动标记某些属性。例如,注解为@NotNull
的属性将包含在生成的YAML文件的必需属性列表中。
该库没有做的一件事是将可选属性标记为nullable: true
。但是,默认情况下,Sping 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
}
}
}
}
}
2条答案
按热度按时间unftdfkk1#
您可以直接使用
@Schema
注解属性。这里的关键是nullable
和requiredMode
都必须下注。在某些情况下,this是我的确切用例。
64jmpszr2#
一个解决方案是创建一个springdoc-openapi
OpenApiCustomiser
Spring bean,它将所有属性设置为nullable
,除非它们在required
属性列表中。这种方法得益于内置的springdoc-openapi对@NotNull
和其他类似注解的支持,因为required
属性将根据这些属性的存在以标准方式计算。