【问题标题】:How to arrange the order of Docket's groupName displayed in Swagger UI如何安排 Docket 的 groupName 在 Swagger UI 中显示的顺序
【发布时间】:2019-07-15 04:43:34
【问题描述】:

我在一个 Spring Boot 应用程序中设置了两个不同的 Docket API。 我给了一个 Docket “Test” groupName 并留下了另一个,所以它最终在 Swagger UI 中成为“默认”。

我的问题是,如何在 UI 中安排这些 Docket 的顺序。

起初,我以为它是按字母顺序排列的,但事实并非如此。我一直在更改名称,但顺序未知。

    @Bean
    public Docket myAPI(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("anything"))
            .paths(PathSelectors.regex("/v1/anything.*"))
            .build()
            .apiInfo(apiInfo());
        buildGlobalParameter(docket);
        buildGlobalResponseMessage(docket);
        return docket;
    }

    @Bean
    public Docket testAPI(){
        Docket tDocket = new Docket(DocumentationType.SWAGGER_2)
            .groupName("Test Card")
            .select()
            .apis(RequestHandlerSelectors.basePackage("anything"))
            .paths(PathSelectors.regex("/v1/anything2*"))
            .build()
            .apiInfo(apiTestInfo());
        buildGlobalParameter(tDocket);
        buildGlobalResponseMessage(tDocket);
        return tDocket;
    }

https://i.imgur.com/bMiGkXe.jpg

对不起,我还不能发布图片,所以我留下了直接网址。

当我运行 spring boot 应用程序时,我希望默认 Swagger UI 显示为“默认”。

【问题讨论】:

    标签: java spring-boot swagger-ui swagger-2.0 springfox


    【解决方案1】:

    文档确实按字母顺序排序 - 您示例中的文档也是如此。如果 Docket 的组名是“Test”和“default”,则 Docket 也将按该顺序显示在 Swagger UI 页面上。如果您明确命名的案卷名称是“test”(而不是“Test”或“Test Card”),那么它们将按照您的预期显示。

    这种行为的原因是默认情况下使用区分大小写的String.compareTo(String) 方法比较字符串 - 考虑到,由于您示例中的案卷名称的第一个字符是“T”和“d”,因此案卷与名称“Test”实际上应该出现在名称为“default”的名称之前,因为它们的 Unicode 值分别是 84 和 100。

    另一方面,不幸的是,您的问题的答案是否定的 - 特别是如果您使用的是 Swagger2 或更旧版本。有 proposal/pull-request 用于删除案卷排序,并且该更改将包含在 Swagger3 中(根据 Springfox 当前主要贡献者对共享拉取请求的响应)。现在,您有 3 个脏选项来实现按所需顺序显示案卷:

    • 为每个案卷组名称添加相应的数字作为前缀 - 使用这种方法,您还应该为默认案卷定义显式名称,因此其名称可能类似于“1 default”,而其他案卷的名称将是“2 Test ”。如果您有超过 9 个案卷,请记住添加前导零,以防在前缀/数字之后立即找到一个 Unicode 值高于 58 的字符(对于此示例中的空格,因为它的值是32)
    • 为每个案卷组名称添加相应数量的空格作为前缀(数量越大,位置越晚) - 这实际上是一个很好的解决方法,因为前导空格可以按所需顺序对案卷进行排序,但它们会在显示之前被修剪,因此 Swagger UI 上的下拉菜单不会看起来很奇怪。如果您有很多案卷,并且在每个组名的字符串文字中手动插入特定数量的空格很麻烦,您可以使用here 中的一些字符重复解决方案
    • 如果您迫不及待地等待 Swagger3 并且以前的选项看起来太脏或作为您的部分解决方法,您可以从 Swagger2 中提取一些组件类并相应地调整它们,这样文档集就不会显示在下拉列表中菜单按字母顺序排序,但与使用 @Bean 注释定义/注入的顺序相同。在前面提到的pull-request 及其 cmets 中,您可以找到需要进行的细微更改。除了将提到的 2 个类导出到您的项目之外,您还必须使用非公共访问修饰符提取相应的已使用类。注意:如果你一切都做对了,你应该得到正好 5 个类。另外,不要忘记使用 @Primary 注释对提取和自定义的 @Component 类进行注释!

    【讨论】:

      猜你喜欢
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 2020-12-22
      • 2021-04-16
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多