我在一个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显示为“默认”。
答案 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种肮脏的选择,可以实现以想要的顺序显示船坞:
@Bean
批注定义/注入的顺序相同。在前面提到的pull-request及其注释中,您可以找到需要做的微小更改。除了将2个提到的类导出到您的项目外,您还必须使用非公共访问修饰符提取相应的使用过的类。注意:如果您将所有事情都做对了,那么您应该得到5个班级。另外,不要忘了用@Component
注释对提取的和定制的@Primary
类进行注释!