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

Java 如何安排Docket的groupName在Swagger UI中的显示顺序,java,spring-boot,swagger-ui,swagger-2.0,springfox,Java,Spring Boot,Swagger Ui,Swagger 2.0,Springfox,我在一个spring boot应用程序中设置了两个不同的Docket API。 我给了一个Docket测试组名,留下了另一个,因此它最终成为了Swagger UI中的默认值 我的问题是,如何在UI中安排这些摘要的顺序 起初,我以为它是按字母顺序排列的,但事实并非如此。我一直在换名字,但顺序不明 @豆子 公开摘要myAPI{ Docket Docket=新DocketDocumentationType.SWAGGER_2 选择 .apisRequestHandlerSelectors.basePa

我在一个spring boot应用程序中设置了两个不同的Docket API。 我给了一个Docket测试组名,留下了另一个,因此它最终成为了Swagger UI中的默认值

我的问题是,如何在UI中安排这些摘要的顺序

起初,我以为它是按字母顺序排列的,但事实并非如此。我一直在换名字,但顺序不明

@豆子 公开摘要myAPI{ Docket Docket=新DocketDocumentationType.SWAGGER_2 选择 .apisRequestHandlerSelectors.basePackageanything .pathsPathSelectors.regex/v1/anything* 建筑 .apiInfoapiInfo; 构建全球参数摘要; 建立全球响应消息摘要; 返回摘要; } @豆子 公开摘要{ Docket tDocket=新DocketDocumentationType.SWAGGER_2 .GroupName测试卡 选择 .apisRequestHandlerSelectors.basePackageanything .pathsPathSelectors.regex/v1/anything2* 建筑 .ApiInfoApitesInfo; 构建全局参数包; 建立全球响应消息摘要; 返回tDocket; }

很抱歉,我还不能发布图片,所以我将离开直接URL


当我运行spring boot应用程序时,我希望显示的默认Swigger UI是默认的。

摘要确实是按字母顺序排序的,您的示例中的摘要也是如此。如果卷宗的组名为Test和default,则卷宗也将按该顺序显示在Swagger UI页面上。如果显式命名的docket的名称是test而不是test或test Card,那么它们将按照您的预期显示

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

另一方面,你的问题的答案很不幸是否定的——特别是如果你使用的是Stragger2或更老的版本。根据Springfox当前的主要贡献者对共享拉取请求的响应,删除摘要排序是不可能的,并且该更改将包含在Swaggger3中。目前,您有3个脏选项来实现按想要的顺序显示摘要:

将相应的数字作为前缀添加到每个docket组名称中-使用这种方法,您还应该为默认docket定义显式名称,这样它的名称可以类似于1 default,而其他docket的名称将是2 Test。如果有9个以上的摘要,请记住,如果在前缀/数字之后立即找到Unicode值大于58的字符,则不需要添加前导零,因为此示例中的空格值为32 将相应数量的空格作为前缀添加到每个摘要组名称中,数量越大,位置越晚-这实际上是一个很好的解决方法,因为前导空格可以按所需顺序排列摘要,但是在显示之前,它们会被修剪,这样大摇大摆的用户界面上的下拉菜单看起来就不会奇怪了。如果您有许多摘要,并且手动在每个组名的字符串文本中插入特定数量的空格很麻烦,那么您可以使用一些解决方案从组名中重复字符 如果您迫不及待地等待Swagger 3,并且之前的选项看起来太脏,或者作为您的部分解决方案,您可以从Swagger 2中提取一些组件类,并相应地调整它们,这样摘要就不会显示在按字母排序的下拉菜单中,而是按照@Bean注释定义/注入它们的顺序。在前面提到的内容和评论中,您可以找到需要做的细微更改。除了将上面提到的2个类导出到项目中之外,还必须使用非公共访问修饰符提取相应的已使用类。注意:如果你能把每件事都做好,你应该有5门课。另外,不要忘记用@Primary注释对提取和定制的@Component类进行注释!