当前位置: 首页 > 知识库问答 >
问题:

如何使用Swagger Core(springdoc-openapi)生成OpenAPI任意类型?

葛勇锐
2023-03-14
public class TypeWithObject {
    private Object value;

    public Object getValue() { return value; }
    public void setValue(Object value) { this.value = value; }
}

OpenAPI3.0规范规定,没有任何类型的模式将匹配任何数据类型。

没有类型的模式匹配任何数据类型--数字、字符串、对象等等。

因此,对此进行建模的正确方法是下面的Swagger定义,其中value没有type属性:

{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenAPI definition",
    "version": "v0"
  },
  "components": {
    "schemas": {
      "TypeWithObject": {
        "type": "object",
        "properties": {
          "value": {}
        }
      }
    }
  }
}

但是,每个开放问题Swagger-core#3834,JavaObject值都映射到OpenAPIObject类型,而不是任意类型。如上所述,这意味着这样的API返回或接受不是OpenAPI对象的类型是不正确的,例如字符串数字布尔等。

我做了各种尝试,试图让应用程序将此类型生成为OpenAPI任意类型,但都无济于事。在使用自定义ModelConverter使用带有空类型的Swagger模式时,我发现了一件事,Swagger核心最终将类型转换为对象作为其内部处理的一部分。这目前被记录为Swagger Core的开放特性请求,如Swagger-Core#4014。

说完这一切:如何让我生成的类型使用OpenAPI任意类型?

共有1个答案

滕无尘
2023-03-14

一种方法是在单独的文件中手动定义任意类型模式,并使用OpenAPI$ref关键字(使用@schema(ref=“...”))引用该类型。

api-docs-anyvalue.yml:

components:
  schemas:
    AnyValue: {}
java prettyprint-override">import io.swagger.v3.oas.annotations.media.Schema;

public class TypeWithObject {
    @Schema(ref = "api-docs-anyvalue.yml#/components/schemas/AnyValue")
    private Object value;

    public Object getValue() { return value; }
    public void setValue(Object value) { this.value = value; }
}

结果:

{
  "openapi": "3.0.1",
  "info": {
    "title": "OpenAPI definition",
    "version": "v0"
  },
  "components": {
    "schemas": {
      "TypeWithObject": {
        "type": "object",
        "properties": {
          "value": {
            "$ref": "api-docs-anyvalue.yml#/components/schemas/AnyValue"
          }
        }
      }
    }
  }
}
 类似资料:
  • **代码:(类名已重命名)** 两个版本中的CheeseDTO YAML: 使用springdoc-openapi-ui 1.3.9,我的yaml是这样生成的: 昂首阔步3注释: OpenAPi生成器maven插件 有没有办法用springdoc-openapi-ui>1.4.0生成?我必须更改我的大摇大摆的注释或更改我的java生成器吗?

  • 我已经使用MongoDB启动了一个新的Spring Boot应用程序(2.2.1.RELEASE)。 为了创建一些API文档,我添加了springdoc API: 由于我依赖Spring来处理RESTendpoint的生成,因此我创建了以下简单的存储库: 所以我没有使用的类。 我试图添加一些ProfileRepository中方法的注释,但不会生成任何内容。 : 如何为Spring数据REST存储

  • springdoc-openapi库自动标记生成的OpenAPI文档中所需的某些属性。例如,注释为的属性将包括在生成的YAML文件中所需的属性列表中。 库不做的一件事是将可选属性标记为。但是,默认情况下,Spring Boot应用程序将在请求中接受,并在可选属性的响应中返回。这意味着OpenAPI文档和endpoint行为之间存在差异。 在SpringDoc-OpenAPI生成的OpenAPI文档

  • 我试图在maven构建期间生成swagger.json文件。 这是我在pom.xml中从docs获得的插件。 任何帮助都将不胜感激。

  • 我有一个Spring Boot(kotlin)项目,我使用springdoc openapi生成openapi 3规范。我的数据模型如下所示: 还有一个简单的控制器,如下所示: 生成的yaml为: 这里的问题是我的控制器可以返回或,这在返回类型中指定。我期望生成的模式是: 有没有办法做到这一点?

  • 我有一个Spring启动应用程序,使用springdoc-openapi启用了昂首阔步的留档。由于某种原因,有一个名为/application.wadl的终结点会自动创建,而不会添加任何逻辑。有没有办法禁用wadl终结点?我没有在application.yml文件中添加特定的Wadl配置