Swagger/OpenAPI 注释 V3 - 在 swagger 注释中使用枚举值

bra*_*mdc 8 java enums annotations swagger openapi

我正在使用从以下依赖项导入的 Swagger/OpenApi V3 注释创建我们应用程序的 API 描述:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.1.45</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

其中一个注解是一个@Schema注解,它接受一个名为allowableValues允许字符串数组的属性:

@Schema(description = "example", 
        allowableValues = {"exampleV1", "exampleV2"}, 
        example = "exampleV1", required = true)
private String example;
Run Code Online (Sandbox Code Playgroud)

现在我想使用在我们的 Enum 类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向 Enum 添加类型时添加它。这样我们就可以像这样使用它:

public enum ExampleEnum {
    EXAMPLEV1, EXAMPLEV2;
    public static String[] getValues() {...}
}

@Schema(description = "example", 
        allowableValues = ExampleEnum.getValues(), 
        example = "exampleV1", required = true)
private String example;
Run Code Online (Sandbox Code Playgroud)

现在这不会编译,因为在执行注释时该方法是未知的。是否有这样的解决方案允许在 swagger V3 注释属性值中使用枚举?

查看以下资源:

您可以在全局组件部分定义可重用的枚举,并通过 $ref 其他地方引用它们。

最坏的情况是,我确实可以在一个常量位置定义它,并且在将类型添加到 Enum 之后,只需要在另一个位置添加类型。但如果可能的话,我首先想探索上述解决方案。

没有说明使用任何类或动态生成的值。

是关于在 swagger 中记录枚举而不是在 swagger annotations API 中使用它们。

Tar*_*der 10

尝试使用@Schema(implementation = ExampleEnum.class, ...),您可以添加您想要的所有其他属性。我需要有关您的实施的更多信息,但请先尝试一下。

  • 我确认它运行良好,至少在 **OpenAPI v2** 上如此,刚刚在我的代码的几个地方进行了验证,这对我帮助很大!谢谢! (3认同)

小智 7

就我而言,我在枚举中添加了注释:

@Schema(enumAsRef = true)
public enum WikipediaLanguage {
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后将其注释为 REST 控制器方法参数中的参数:

@Parameter(
    description = "Language of the Wikipedia in use",
    required = true
) @RequestParam WikipediaLanguage lang
Run Code Online (Sandbox Code Playgroud)