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

如何在从Java代码生成的Swagger规范中创建可重用枚举?

尉迟明辉
2023-03-14

我试图为我的Java代码生成OpenAPI(3.0.1)规范。为了实现这一点,我使用了Swagger注释(版本2.0.8)和Swagger Maven插件。

我对枚举有问题。比如说,我有两个方法返回相同的枚举。在OpenAPI规范中,我希望在这两个API操作中都有这个枚举和$ref链接的单一模式定义。但相反,我在每个API操作中都重复了枚举定义。如果不手动编辑规范文件,如何避免这种重复?

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/properties")
@Produces("application/json")
public class TestService {
    @GET
    @Path("/enum1")
    @Operation
    @ApiResponses({
        @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = Color.class)))
    })
    public Color getColor1() {
        throw new UnsupportedOperationException();
    }

    @GET
    @Path("/enum2")
    @Operation
    @ApiResponses({
        @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = Color.class)))
    })
    public Color getColor2() {
        throw new UnsupportedOperationException();
    }

    public enum Color {
        RED,

        GREEN,

        BLUE
    }
}

openapi: 3.0.1
components:
    schemas:
        Color:
            type: string
            enum:
                - RED
                - GREEN
                - BLUE
paths:
  /properties/enum2:
    get:
      operationId: getColor2
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Color'
  /properties/enum1:
    get:
      operationId: getColor1
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Color'

下面是我得到的规范:

openapi: 3.0.1
paths:
  /properties/enum2:
    get:
      operationId: getColor2
      responses:
        200:
          content:
            application/json:
              schema:
                type: string
                enum:
                - RED
                - GREEN
                - BLUE
  /properties/enum1:
    get:
      operationId: getColor1
      responses:
        200:
          content:
            application/json:
              schema:
                type: string
                enum:
                - RED
                - GREEN
                - BLUE

共有1个答案

甄越
2023-03-14

我在kotlin中,但我成功地将(相对较新的)@schema(enumAsRef=true)添加到enum类中。

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/properties")
@Produces("application/json")
public class TestService {
    @GET
    @Path("/enum1")
    @Operation
    @ApiResponses({
        @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = Color.class)))
    })
    public Color getColor1() {
        throw new UnsupportedOperationException();
    }

    @GET
    @Path("/enum2")
    @Operation
    @ApiResponses({
        @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = Color.class)))
    })
    public Color getColor2() {
        throw new UnsupportedOperationException();
    }

    @Schema(enumAsRef = true) // THIS MAKES ENUM REF
    public enum Color {
        RED,

        GREEN,

        BLUE
    }
}
 类似资料:
  • 我有yaml格式的OpenAPI3.0规范和从它生成代码的应用程序。一切工作都很好,除了生成昂首阔步的UI。我使用spring-fox来生成它,但它似乎从控制器生成了霸气的UI2.0版本,这些控制器是从openapi规范生成的。 我如何直接从3.0规范而不是从3.0openapi规范生成的控制器生成昂首阔步的ui?

  • 我正在从swagger(Open API 2)转向springdoc(Open API 3),但今天在某些情况下,我使用swagger-codemen-maven-plugin从yaml生成代码(用于客户端和提供商),遵循合同优先策略。下面是配置示例: 使用springdoc openapi maven插件生成代码有没有等效的选项?

  • 我试图在spring boot应用程序中使用swagger注释从Java代码中获取swagger规范(yaml)。我对模型进行注释,然后运行springboot应用程序,然后从http://localhost:8080/v2/api-文档。 我的模型如下所示: 我想为此创建正确的swagger yaml斑点。当我访问自动提供yaml的swagger UI时,我期待下面的内容。 注意dateOfBi

  • 我正在努力创建rest客户端,我将调用一个API来提供这个大的json输出。我想知道如何通过输入这个json来自动创建Pojo类来晃动代码gen,并让它为我创建我的pojo类,这将节省手动时间。这是我尝试过的 要为生成PHP客户端,请执行以下操作:http://petstore.swagger.io/v2/swagger.json,请运行以下命令: (如果您使用的是Windows,请将最后一个命令

  • 我经常手动修改空格、语句对齐和表格,而不是使用Ctrl+Alt+L来形成代码。然后,启动我的应用程序需要很长时间,因为Android Studio创建了一个新的构建,即使代码本身是相同的。 有办法改变这个设置吗?

  • 我正在尝试使用https://github.com/pseudomuto/protoc-gen-doc,我无法找到在消息中排除grpc服务/字段的一些API的方法。 在swagger中找到了相关的样式,但似乎找不到将其添加到Pro buf文件中的方法http://watson-developer-cloud.github.io/api-guidelines/swagger-coding-style