Open Api swagger docs with service names of the format ***-service

Viewed 333

I have a java spring boot service mesh of services. I am using open api for swagger documentation. When I run my spring cloud gateway and access http://localhost:{my-port}/swagger-ui.html, it works fine and loads the swagger ui which mentions /v3/api-docs in the "Explore" title bar. Also, when I add the service name to the url like so /v3/api-docs/my-service, it works fine.

However, I want to try a list of dropdown services instead of manually appending the service name for each service. I have tried this grouping code in my gateway:

@Bean
    fun apis(): List<GroupedOpenApi> {
        val groups = ArrayList<GroupedOpenApi>()
        val definitions = locator!!.routeDefinitions.collectList().block()
        definitions!!.stream().filter { routeDefinition -> routeDefinition.id.matches(".*-service".toRegex()) }.forEach { routeDefinition ->
            val name = routeDefinition.id.replace("-service".toRegex(), "")
            GroupedOpenApi.builder().pathsToMatch("/$name/**").setGroup(name).build()
        }
        return groups
    }

Now, after this when I access http://localhost:{my-port}/swagger-ui.html, it shows a drop down list of all the service with the "-service" removed. But after selection, the docs don't show up.

Although, if I access it in a separate tab with http://localhost:{my-port}/v3/api-docs/my-service, it shows me the json of all the paths and works fine. Just doesn't load in the swagger ui.

Here's gateway route for one of the service and openapi:

- id: my-service
        uri: lb://my-service
        predicates:
          - Path=/api/v1/my/**
        filters:
          - name: CircuitBreaker
            args:
              name: my-service
              fallbackuri: forward:/myServiceFallBack 
0 Answers
Related