【问题标题】:Swagger/OpenAPI annotations V3 - use Enum values in swagger annotationsSwagger/OpenAPI 注释 V3 - 在 swagger 注释中使用 Enum 值
【发布时间】:2020-04-04 13:22:20
【问题描述】:

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

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.1.45</version>
</dependency>

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

@Schema(description = "example", 
        allowableValues = {"exampleV1", "exampleV2"}, 
        example = "exampleV1", required = true)
private String example;

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

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

@Schema(description = "example", 
        allowableValues = ExampleEnum.getValues(), 
        example = "exampleV1", required = true)
private String example;

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

查看了以下资源:

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

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

没有提及使用任何类或动态生成的值。

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

【问题讨论】:

    标签: java enums annotations swagger openapi


    【解决方案1】:

    在我的例子中,我在我的枚举中添加了一个注释:

    @Schema(enumAsRef = true)
    public enum WikipediaLanguage {
      ...
    }
    

    然后只是在他们的 REST 控制器方法的参数中使用它作为参数进行注释:

    @Parameter(
        description = "Language of the Wikipedia in use",
        required = true
    ) @RequestParam WikipediaLanguage lang
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 不幸的是我没有代码了,所以我不能再尝试了......还有其他人可以确认吗?
      • 这似乎对我不起作用,因为我将 @Schema(implementation = MyEnum.class) 添加到控制器中的参数之一。
      • @ojathelonius 请分享您的代码和更多关于您的问题的上下文
      • 我确认它运行良好,至少在 OpenAPI v2 上,刚刚在我的代码的几个地方进行了验证,这对我帮助很大!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2018-09-26
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多