Describe the bug
After update to Spring Boot to 3.4.4 version and springdoc webflux ui starter to 2.8.6 the main page Swagger UI
shows by default petstore swagger Open API.
I know that we can use to disable this behavior additional configuration:
springdoc:
swagger-ui:
disable-swagger-default-url: true
But it doesn't work because SwaggerIndexPageTransformer ignored when I open default swagger path for webflux /webjars/swagger-ui/index.html
After some research, I found that Spring added resource handler with org.springframework.web.reactive.resource.CachingResourceTransformer for path /webjars/** in org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration.WebFluxConfig#addResourceHandlers and this is used to process when I open /webjars/swagger-ui/index.html instead SwaggerIndexPageTransformer.
The problem in org.springdoc.webflux.ui.SwaggerWebFluxConfigurer#addResourceHandlers it adds SwaggerIndexPageTransformer for path /swagger-ui and it is not used when we open /webjars/swagger-ui/index.html URL.
if (DEFAULT_WEB_JARS_PREFIX_URL.equals(webjarsPrefix)) {
swaggerUiPrefix = SWAGGER_UI_PREFIX;
resourcePath = webjarsPrefix + SWAGGER_UI_PREFIX + DEFAULT_PATH_SEPARATOR + swaggerUiConfigProperties.getVersion();
} else {
swaggerUiPrefix = webjarsPrefix;
resourcePath = DEFAULT_WEB_JARS_PREFIX_URL + DEFAULT_PATH_SEPARATOR;
}
registry.addResourceHandler(uiRootPath + swaggerUiPrefix + ALL_PATTERN)
.addResourceLocations(CLASSPATH_RESOURCE_LOCATION + resourcePath)
.resourceChain(false)
.addResolver(swaggerResourceResolver)
.addTransformer(swaggerIndexTransformer);
We need to add webjarsPrefix to swaggerUiPrefix and then SwaggerIndexPageTransformer will be used for path /webjars/swagger-ui that overrides default Spring CachingResourceTransformer.
To Reproduce
Steps to reproduce the behavior:
- Create Spring boot 3.4.4 project and add
org.springdoc:springdoc-openapi-starter-webflux-ui:2.8.6 deps.
- Create some RestController with Dto's that used OpenAPI.
- Open swagger UI for your service, and you will see default petstroe swagger instead of your project
/v3/api-docs
Expected behavior
I expected that when I set up
springdoc:
swagger-ui:
disable-swagger-default-url: true
then springdoc will be transforming the index page and use /v3/api-docs by default instead petstore swagger
Describe the bug
After update to
Spring Bootto 3.4.4 version andspringdoc webflux ui starterto 2.8.6 the main page Swagger UIshows by default petstore swagger Open API.
I know that we can use to disable this behavior additional configuration:
But it doesn't work because
SwaggerIndexPageTransformerignored when I open default swagger path for webflux/webjars/swagger-ui/index.htmlAfter some research, I found that Spring added resource handler with
org.springframework.web.reactive.resource.CachingResourceTransformerfor path/webjars/**inorg.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration.WebFluxConfig#addResourceHandlersand this is used to process when I open/webjars/swagger-ui/index.htmlinsteadSwaggerIndexPageTransformer.The problem in
org.springdoc.webflux.ui.SwaggerWebFluxConfigurer#addResourceHandlersit addsSwaggerIndexPageTransformerfor path/swagger-uiand it is not used when we open/webjars/swagger-ui/index.htmlURL.We need to add
webjarsPrefixtoswaggerUiPrefixand thenSwaggerIndexPageTransformerwill be used for path/webjars/swagger-uithat overrides default SpringCachingResourceTransformer.To Reproduce
Steps to reproduce the behavior:
org.springdoc:springdoc-openapi-starter-webflux-ui:2.8.6deps./v3/api-docsExpected behavior
I expected that when I set up
then springdoc will be transforming the index page and use
/v3/api-docsby default instead petstore swagger