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

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

杜绍元
2023-03-14

我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的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;

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

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

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

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

查看了以下资源:

  • https://swagger.io/docs/specification/data-model/enums/

您可以在global components部分中定义可重用的枚举,并在其他地方通过$ref引用它们。

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

  • https://github.com/swagger-api/swagger-core/wiki/swagger-2.x---注释#schema

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

  • 大摇大摆地枚举

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

共有1个答案

洪和风
2023-03-14

尝试使用@schema(implementation=exampleEnum.class,...),您可以添加所需的所有其他属性。我需要更多的信息,您的实现,但尝试这首先。

 类似资料:
  • 当我访问我的Swagger UIendpoint时,我会看到这个服务的记录良好的条目,包括关于和参数的信息。现在,我试图以类似的方式创建和方法,但遇到了一个问题。 由于我的/请求包含许多表单参数,所以我将它们封装到一个对象中,并用注释该方法。我的表单对象如下所示: 我的方法如下所示: 什么也没做。我尝试将方法签名更改为如下所示: 还是什么都没有。我的问题是,是否有一种方法可以让OpenAPI/Sw

  • 我正在生成Restendpoint,包括向生成的代码添加Openapi/Swagger注释。 虽然它可以很好地处理基本类型,但我在自定义类方面有一些问题。 现在我有很多自定义类的重复模式条目(使用@Schema(实现=MyClass.class)),但至少需要的信息在那里。然而,我想找到一种方法来删除重复的模式条目,同时保留附加信息。 在一个讨论$ref和缺乏兄弟属性的github问题上,我发现了

  • 我开发了一个带有Swagger注释的REST API。我已经能够展示一个炫耀的ui应用程序的api文档,非常好。 问题:根据我的注释,我试图使用swagger提供的url生成符合该规范的客户端。问题是,它似乎是不兼容的,或者至少,我不知道如何做swagger编辑器读取我的网址,并从那时起,产生客户。但是swagger编辑器向我报告了一些错误... 是否可以将我的带注释的 swagger api 与

  • 我正在从带注释的java代码生成OpenAPI 3.0文档。但问题是,当我将@Schema注释添加到enum时,所有值都会消失。我正在使用Thorntail 2.3.0。最终使用microprofile openapi分数。 我知道我可以改变。yaml文件,但我需要直接从Java代码生成yaml。 这是我在github上的最小示例:https://github.com/pkristja/openA

  • 我有以下代码,这是我的API的艺术 如果我有@ApiParam注释,@PathVariable就变成非必需的,所以如果我没有输入userId并通过Swagger UI发出请求,请求仍然会转到服务器,这会导致不必要的服务器错误。默认情况下,@Path变量的参数“必需”为true(因此,默认值为@PathVariable(name=“userId”,必需=true)),并且在该参数上没有@ApiPar