springdoc-openapi库自动标记生成的OpenAPI文档中所需的某些属性。例如,注释为@notnull
的属性将包括在生成的YAML文件中所需的属性列表中。
库不做的一件事是将可选属性标记为nullable:true
。但是,默认情况下,Spring Boot应用程序将在请求中接受null
,并在可选属性的响应中返回null
。这意味着OpenAPI文档和endpoint行为之间存在差异。
在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; }
}
"components": {
"schemas": {
"RequiredExample": {
"required": [
"key"
],
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
"components": {
"schemas": {
"RequiredExample": {
"required": [
"key"
],
"type": "object",
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
"nullable": true
}
}
}
}
}
一个解决方案是创建一个springdoc-openapiOpenAPICUSTOMISER
Spring bean,它将所有属性设置为nullable
,除非它们在required
属性列表中。这种方法得益于内置的springdoc-openapi对@Notnull
和其他此类注释的支持,因为required
属性将根据这些属性的存在以标准方式计算。
java prettyprint-override">import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.Schema;
import org.springdoc.core.customizers.OpenApiCustomiser;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class NullableIfNotRequiredOpenApiCustomizer implements OpenApiCustomiser {
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public void customise(OpenAPI openApi) {
for (Schema schema : openApi.getComponents().getSchemas().values()) {
if (schema.getProperties() == null) {
continue;
}
((Map<String, Schema>) schema.getProperties()).forEach((String name, Schema value) -> {
if (schema.getRequired() == null || !schema.getRequired().contains(name)) {
value.setNullable(true);
}
});
}
}
}
OpenAPI3.0规范规定,没有任何类型的模式将匹配任何数据类型。 没有类型的模式匹配任何数据类型--数字、字符串、对象等等。 因此,对此进行建模的正确方法是下面的Swagger定义,其中没有属性: 但是,每个开放问题Swagger-core#3834,Java值都映射到OpenAPI类型,而不是任意类型。如上所述,这意味着这样的API返回或接受不是OpenAPI的类型是不正确的,例如、、等。
我正在使用版本为(1.2.32)的SpringDocOpenAPI。现在,我想在UI中按HTTP方法(反向顺序)对endpoint进行排序,并且我没有在endpoint方法上使用任何标记。 如果我有4个endpoint发布,获取,放置,删除,然后我想显示方法放置,发布,获取,删除 我尝试了以下方法,但似乎不起作用: springdoc.swagger-ui.operations排序器=(方法和al
我已经使用MongoDB启动了一个新的Spring Boot应用程序(2.2.1.RELEASE)。 为了创建一些API文档,我添加了springdoc API: 由于我依赖Spring来处理RESTendpoint的生成,因此我创建了以下简单的存储库: 所以我没有使用的类。 我试图添加一些ProfileRepository中方法的注释,但不会生成任何内容。 : 如何为Spring数据REST存储
对于hidden=true,我希望这个参数在swagger-UI中不可见。但确实是。是我误解了这个参数,还是它没有做它应该做的事情? 我希望这个参数在api-docs中,生成能够使用这个参数的客户机,但我希望它在swagger-ui中是不可见的
我试图在OpenAPI 3.0规范中创建一个响应链接。更具体地说,我想提供我的一个响应和其他可用操作之间的已知关系(参见。链接对象)。 在我的SpringBoot项目中,我使用Springdoc(版本:1.3.9)生成API文档。根据@ApiResponse#links文档,我已尝试使用以下endpoint代码实现我的目标: 不幸的是,我看不到任何结果在招摇过市的用户界面,但“没有链接”的描述。