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

时间:2019-07-15 04:43:34

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

我在一个spring boot应用程序中设置了两个不同的Docket API。 我给了一个Docket“测试” groupName,而另一个给了它,所以在Swagger UI中最终变成了“默认”。

我的问题是,如何在UI中排列这些记录的顺序。

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

    @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显示为“默认”。

1 个答案:

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