Java – How to change basePath for Springfox Swagger 2.0

javaspring-bootspringfoxswagger-2.0swagger-ui

I'm running a service, where Swagger UI is accessible at:

http://serviceURL/swagger-ui.html

However, it is behind a proxy, such as:

http://proxyURL/serviceName

Generated URLs by Swagger UI are looking like:

http://proxyURL/

instead of the actual URL with the serviceName as suffix.
As far as I get it, this means manipulating the basePath property. As per documentation:

A swagger API documentation can no longer describe operations on
different base paths. In 1.2 and earlier, each resource could have had
a separate basePath. In 2.0, the basePath equivalents
(schemes+host+basePath) are defined for the whole specification.

@Api(basePath) is deprecated, and it doesn't say what to use and how to use it. How to make the paths generated by Swagger appear properly?

I'm using Spring Boot, Springfox Swagger and annotations.

Best Answer

@Bean
public Docket newsApi(ServletContext servletContext) {
    return new Docket(DocumentationType.SWAGGER_2).pathProvider(new RelativePathProvider(servletContext) {
        @Override
        public String getApplicationBasePath() {
            return "/serviceName" + super.getApplicationBasePath();
        }
    }).host("proxyURL");
}
Related Topic