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, ...),您可以添加您想要的所有其他属性。我需要有关您的实施的更多信息,但请先尝试一下。
小智 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)