Swagger OpenAPI: How to implement separate UI for each package?

Viewed 237

I have 3 APIs, e.g. /api, /internal (for internal services) and /admin (for administration), every of them in separate package:

controller
   |
    --api
   |
    --internal
   |
    --admin

Than, I need implement separate Swagger UI for each package with separate path, e.g.:

http://localhost:8080/api/swagger-ui.html
http://localhost:8080/admin/swagger-ui.html
http://localhost:8080/internal/swagger-ui.html

with only controllers, located in specific path. For now, I have simple bean, like this:

@Bean
fun openApi(): OpenAPI = OpenAPI().info(Info().title("Test title"))
1 Answers

Solution:

@Bean
    fun openApi(): OpenAPI = OpenAPI().info(Info().title("Test title"))

@Bean
fun adminApi(): GroupedOpenApi =
    GroupedOpenApi
        .builder()
        .group("admin")
        .pathsToMatch("/admin/**")
        .build()

@Bean
fun internalApi(): GroupedOpenApi =
    GroupedOpenApi
        .builder()
        .group("internal")
        .pathsToMatch("/internal/**")
        .build()

@Bean
fun apiApi(): GroupedOpenApi =
    GroupedOpenApi
        .builder()
        .group("api")
        .pathsToMatch("/api/**")
        .build()

than, you can choose group this way:

enter image description here

and only endpoints from group path shall appear.

Related