1

I made a small spring boot application (2.2.5.RELEASE) and I want to have swagger and I use springdoc-openapi-ui version 1.6.8.

I have in my application.properties my setting "swagger-ui.hostname" which is an empty string by default.

Other settings I have for springdoc are

springdoc.api-docs.path=/api-docs
springdoc.swagger-ui.use-root-path=false
springdoc.swagger-ui.operationsSorter=method
springdoc.swagger-ui.enabled=true
springdoc.api-docs.enabled=true

I can run locally the application and execute the GET endpoint test. I can see

http://localhost:8089/swagger-ui.html

( "swagger-ui.hostname" is an empty string )

I have one problem when I do deploy on tomcat server and I use

"-Dswagger-ui.hostname=company.com-live".

The problem is swagger or openapi generates url wrong for curl in the page swagger-ui.html when I execute one endpoint test (get).

I can see in the page of swagger https://company.com-live/swagger-ui.html

curl -X 'GET' \
  'https://company.com-live/api-docs/company.com-live/test' \
  -H 'accept: */*'

The app was started with "-Dswagger-ui.hostname=https://company.com-live"

( "company.com-live" is duplicated and "/api-docs" is added )

I expected this url

https://company.com-live/test

These works

https://company.com-live/internal/mon/info
https://company.com-live/ping

How to configure correct the swagger OpenAPI to obtain this url ? https://company.com-live/test

Java code for configuration is

@Configuration
@Slf4j
public class SwaggerConfig {

    @Value("${swagger-ui.hostname:}")
    private String hostname;

    @Bean
    public OpenAPI springShopOpenAPI() {

        List<Server> serversList = new ArrayList<>();

        System.out.println(message);
        log.info(message);

        if (StringUtils.isNoneBlank(hostname)) {
            serversList.add(new Server().url(hostname));
        }

        return new OpenAPI()
                .components(new Components()
                .addSecuritySchemes("basicScheme", 
                new SecurityScheme()
                    .type(SecurityScheme.Type.HTTP)
                    .scheme("basic")))
                .info(new Info()
                        .title("MyTools")
                        .description("MyTools")
                        .version("1.0.0")
                        .contact(new Contact()
                                .email("it-operations@company.com")
                                .name("Company support"))
                .license(new License()
                    .name("Company")
                    .url("https://company.com")))
                .servers(serversList);

    }

    @Bean
    public GroupedOpenApi addressesApi() {

        return GroupedOpenApi.builder()
                .group("Test group")
                .pathsToMatch("/test/**")
                .build();
    }

    @Bean
    public GroupedOpenApi pingApi() {
        return GroupedOpenApi.builder()
                .group("Ping")
                .pathsToMatch("/ping/**")
                .build();
    }

}
alin
  • 27
  • 3

0 Answers0