Swagger UI: How to custom sort resources
Solution 1
After digging into the problem, I see that new versions of swagger-ui do not support custom ordering as an option. Springfox also give no chance of reorder the generated json, so the only way is to implement a "workaround" in swagger-ui.
In render function, line 21766 of swagger-ui.js file (v2.2.6):
// Workaround: alphabetically ordered tags
this.api.apisArray.sort(function (a, b) {
if (a.tag < b.tag)
return -1;
if (a.tag > b.tag)
return 1;
return 0;
})
With this code the UI shows the tags ordered.
Solution 2
Alphabetical order seems to be the default. However I needed a custom order of my tags.
I had this problem today but due to a strike of luck I found out the tag ctor takes a int order. It seems to work for me!
So, re-using your code sample:
...
.tags(
new Tag("foo", "tag description", 2),
new Tag("bar", "another desc ", 1),
...
And tag foo
appears after tag bar
on swagger UI.
(I'm using springfox v2.9.2)
Comments
-
Emilio almost 2 years
Quiet pretty straighforward question: how can I sort the endpoints in swagger-ui in v2.2.6? I'm using springfox for the java part.
In my main page of swagger, I'm having a collection of resources grouped by tags. These tags are in a random order. I would like to have it in a custom order (and if it's not possible, alphabetically). My SwaggerConfig.java file:
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(); } }
And this is the tag resulting json file that swagger-ui uses in the same order. As you can see the order seems to be random. Not the java tags order, not alphabetically. (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" } ]