如何排列Swagger UI中显示的Docket的groupName的顺序

问题描述 投票:1回答:1

我在一个Spring Boot应用程序中设置了两个不同的Docket API。我给了一个Docket“ Test” groupName并留下了另一个,因此在Swagger UI中最终以“ default”结束。

我的问题是,如何在用户界面中排列这些文件的顺序。

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

    @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

[抱歉,我还不能发布图像,所以我要保留直接URL。

运行Spring Boot应用程序时,我希望默认的Swagger UI显示为“默认”。

java spring-boot swagger-ui swagger-2.0 springfox
1个回答
1
投票

行李箱确实按字母顺序排序-您示例中的行李箱也是如此。如果扩展坞的组名是“ Test”和“ default”,则扩展坞也会以该顺序显示在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)
  • 将相应数量的空格作为前缀添加到每个文案组名称中(数量越大,位置就越晚)-这实际上是一个很好的解决方法,因为前导空格可以按所需顺序对待售的ets子进行排序,但是它们会在显示之前被修剪掉,因此Swagger UI上的下拉菜单不会看起来很奇怪。如果您有很多基座,并且在每个组名的字符串文字中手动插入特定数量的空格很麻烦,则可以使用某些解决方案来重复字符here
  • 如果您不能等待Swagger3,并且先前的选项似乎太脏或不能作为您的部分解决方法,则可以从Swagger2中提取一些组件类并进行相应的调整,因此不会在下拉菜单中显示码头按字母顺序排序,但顺序与使用@Bean注释定义/注入的顺序相同。在前面提到的pull-request及其注释中,您可以找到需要做的较小更改。除了将2个提到的类导出到您的项目外,您还必须使用非公共访问修饰符提取相应的使用过的类。注意:如果您将所有事情都做对了,那么您应该得到5个班级。另外,不要忘了用@Component批注注释提取和自定义的@Primary类!
© www.soinside.com 2019 - 2024. All rights reserved.