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

chr*_*s14 5 java swagger-ui spring-boot swagger-2.0 springfox

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

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

起初我以为是按字母顺序排列的,但事实并非如此。我不断地改变名字,但顺序未知。

    @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;
    }

Run Code Online (Sandbox Code Playgroud)

https://i.stack.imgur.com/bAmNm.jpg

抱歉,我还不能发布图片,所以我留下直接的 URL。

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

zek*_*868 2

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

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

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

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