Swagger2 Change Base Path for Swagger Ui

10,294

I solved this problem setting context path to spring boot application in the application.properties (you can set this variable with different ways, see this spring doc):

server.servlet.context-path=/user (or motorboy in your case)

After set context path I can access swagger-ui or swagger docs from http://localhost:8080/user/swagger-ui.html and http://localhost:8080/user/v2/api-docs respectively.

If you want I can make a simple project and update to github just for clarify and explain this configuration.

Share:
10,294
PacificNW_Lover
Author by

PacificNW_Lover

Updated on June 09, 2022

Comments

  • PacificNW_Lover
    PacificNW_Lover almost 2 years

    Was able to setup Swagger 2 to my SpringBoot app by just adding this SwaggerConfig file and adding the following dependencies:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket productApi() {
            return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
                    .paths(Predicates.not(PathSelectors.regex("/error"))).build().apiInfo(apiInfo());
        }
    
        private ApiInfo apiInfo() {
            ApiInfo apiInfo = new ApiInfo("Motorcycle Shop - Restful Services", "Rest based API for Motorcycle Shop", "1.0", "",
                    new Contact("", "", ""), "", "");
            return apiInfo;
        }
    }
    

    pom.xml

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
     </parent>
    
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    
        <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>
    
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    

    Despite fact that my controller class looks like this:

    @RestController
    @RequestMapping("/motorcycles")
    public class ProductController { 
    
    // GET method
    
    }
    

    ... am still able to invoke that controller by doing this:

    curl -X GET http://localhost:8080/motorcycles
    

    I have to open up the Swagger-ui.html file using the following URL path:

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

    How can I make my Spring Boot app to show something like this (the actual app name or the default RequestMapping specified in a controller - if the controller is the only one in the app):

    http://localhost:8080/motorcycles/swagger-ui.html 
    

    Basically, how can I prefix the swagger-ui.html with the app name?

    So, lets say my app is called motorboy, this is what I want:

    http://localhost:8080/motorboy/swagger-ui.html
    

    And the Curl -X GET for the REST Endpoint looks like this:

    http://localhost:8080/motorboy/motorcycles
    

    It seems that spring-boot is just using plain old http://localhost:8080 for the default app name in the browser for swagger.