【问题标题】:How to hide empty groups in swagger?如何在招摇中隐藏空组?
【发布时间】:2021-03-31 08:33:39
【问题描述】:

我有 yaml 定义中的插件生成的招摇

        <plugin>
            <groupId>org.openapitools</groupId>
            <artifactId>openapi-generator-maven-plugin</artifactId>
            <version>4.3.1</version>
            <configuration>
                <logToStderr>false</logToStderr>
                <generatorName>spring</generatorName>
                <generateSupportingFiles>true</generateSupportingFiles>
                <supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
                <ignoreFileOverride>${project.basedir}/src/main/resources/.openapi-generator-ignore
                </ignoreFileOverride>
                <configOptions>
                    <dateLibrary>java8-localdatetime</dateLibrary>
                    <serializableModel>true</serializableModel>
                    <delegatePattern>true</delegatePattern>
                    <useBeanValidation>true</useBeanValidation>
                    <performBeanValidation>true</performBeanValidation>
...

这会生成带有空控制器组的 swagger 文档

我想删除它们

我尝试修改

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            //.ignoredParameterTypes(DokumentApiController.class)
            .select()
            //.apis(RequestHandlerSelectors.basePackage("....dokument.api"))//.apis(GroupNameFilter()) //
            //.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            .paths(PathSelectors.any()) //.paths(restApiPaths()) //.paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo());

您可以在注释代码中看到我尝试过的内容。结果总是一样的。我要么有空组,要么文档页面上没有任何内容http://127.0.0.1:8080/.../swagger-ui.html#/

如何删除那些空的“-controller”组?

P.S.:我看到 How to remove controller list from Swagger UI 我尝试在实现 Delegate 的类中使用它,但我的解决方案中的很多类都是由插件生成的,我无法直接更改它们。

【问题讨论】:

  • 这能回答你的问题吗? How to remove controller list from Swagger UI
  • 我看到那个帖子我在课堂上尝试过它实现了委托,但它对我没有帮助。我的问题是生成了很多类,我无法直接更改它们。
  • 好的,您尝试过这些方法吗? Check Here
  • 我无法为生成的类添加注释。它将在下一次构建期间被覆盖。我必须找到一种方法如何制作插件来为我插入这些注释到生成的类中,我现在不知道该怎么做。

标签: java spring swagger dynamically-generated


【解决方案1】:

解决方案是修改负责塑造 API 类的 mustache 文件。这需要创建一个自定义的 openapi-generator 工件。在官方网站上,他们给出了相关说明,但我更喜欢从 fork 构建它,更新 groupid 和版本。

要做的改变是:

  1. 创建一个 fork 并克隆代码。

  2. 找到文件:

    modules/openapi-generator/src/main/resources/JavaSpring/api.mustache

  3. 修改行:

@Api (value = "{{{baseName}}}", description = "the {{{baseName}}} API")

对于这个别人:

@Api (value = "{{{baseName}}}", description = "the {{{baseName}}} API", tags = {"{{{baseName}}}",})
  1. 更新 openapi-generator 的 groupid 和版本 工件,为此修改路线的pom /openapi-generator/pom.xml,第 12 至 14 行:
<groupId> org.openapitools.xxxxx </groupId>
<artifactId> openapi-generator </artifactId>
<version> 5.2.1 </version>

改完之后,新建一个openapi-generator artifact,在本地编译安装:mvn clean install

在我们的应用程序中,在打开的 api 插件中添加以下块,就在执行块之后:

<dependencies>
<dependency>
<groupId> org.openapitools.xxxxx </groupId>
<artifactId> openapi-generator </artifactId>
<version> 5.2.1 </version>
</dependency>
</dependencies>

之后,执行 maven 以便执行 openapi-generator 插件,然后检查 API 类型的类是否在注解 @Api 中具有标记部分。

现在,当启动应用程序时,在 swagger 文档中,空端点应该已经消失了。 为此,必须在 yaml 定义中正确标记所有路径。

pd:这是我的分叉回购:

https://github.com/leoncio44/swagger-codegen

开发分支。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2014-06-11
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2023-03-14
    • 2021-04-29
    相关资源
    最近更新 更多