我在一个 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;
}
https://i.imgur.com/bMiGkXe.jpg
抱歉,我还不能发布图片,所以我留下直接的 URL。
当我运行 Spring Boot 应用程序时,我希望默认的 Swagger UI 显示为“默认”UI。
最佳答案
摘要确实是按字母顺序排序的 - 您的示例中的摘要也是如此。如果摘要的组名称为“Test”和“default”,则摘要也会按此顺序显示在 Swagger UI 页面上。如果您明确命名的摘要的名称是“test”(而不是“Test”或“Test Card”),那么它们将按照您的预期显示。
这种行为的原因是默认情况下使用区分大小写的 String.compareTo(String)
方法来比较字符串 - 考虑到这一点,因为示例中的摘要名称的第一个字符是名称为“Test”的“T”和“d”确实应该出现在名称“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
注释定义/注入(inject)的顺序相同。关于前面提到的pull-request在其评论中您可以找到需要进行哪些细微更改。除了将提到的 2 个类导出到您的项目之外,您还必须使用非公共(public)访问修饰符提取相应的已使用类。注意:如果你一切都做对了,你最终应该得到 5 门课。另外,不要忘记使用@Primary
注释来注释提取和自定义的@Component
类!
关于java - 如何安排Docket的groupName在Swagger UI中显示的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033353/