Swagger UI:如何自定义排序资源

时间:2016-11-15 16:18:00

标签: rest spring-mvc swagger swagger-ui

安静漂亮的直截了当的问题:如何在v2.2.6中对swagger-ui中的端点进行排序?我正在使用springfox作为java部分。

在我的招摇主页中,我有一组按标签分组的资源。这些标签是随机顺序。我希望按照自定义顺序(如果不可能,按字母顺序排列)。 我的SwaggerConfig.java文件:

package cat.meteo.apiinterna.commons.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Tag;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.any())
            .build()
            .tags(
                    new Tag("XEMA Me", "1"),
                    new Tag("XEMA Ul", "2"),
                    new Tag("XEMA Ag", "3"),
                    new Tag("Prono", "4"),
                    new Tag("Sound", "5")
            )
            .apiInfo(apiInfo());
}

private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("API REST")
            .description("Self-documented API")
            .version("v0.1.0")
            .build();
    }
}

这是swagger-ui以相同顺序使用的json文件的标签。正如您所看到的,顺序似乎是随机的。不是java标签的顺序,不是按字母顺序排列的。 (http://localhost:8080/XXX/v2/api-docs

"tags": [
{
"name": "XEMA Ul",
"description": "2"
},
{
"name": "XEMA Me",
"description": "1"
},
{
"name": "XEMA Ag",
"description": "3"
},
{
"name": "Sound",
"description": "5"
},
{
"name": "Prono",
"description": "4"
}
]

2 个答案:

答案 0 :(得分:2)

在深入研究问题后,我发现swagger-ui的新版本不支持自定义排序。 Springfox也没有机会重新排序生成的json,所以唯一的方法是在swagger-ui中实现“解决方法”。

在渲染功能中,swagger-ui.js文件的第21766行(v2.2.6):

default = true

使用此代码,UI会显示已订购的代码。

答案 1 :(得分:0)

字母顺序似乎是默认设置。但是我需要自定义标签顺序。

我今天遇到了这个问题,但是由于运气好,我发现标签ctor接受了int命令。 看来对我有用!

因此,重新使用代码示例:

...
            .tags(
                    new Tag("foo", "tag description", 2),
                    new Tag("bar", "another desc   ", 1),
...

并且标签foo会出现在swagger UI的标签bar之后。

(我正在使用springfox v2.9.2)