Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swagger not detecting Spring Data Rest APIs with Spring Boot

I setup a Spring Boot project including Spring Data Rest and Swagger:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.4.0</version>
</dependency>
<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.4.0</version>
</dependency>

This is my Swagger configuration:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

Excerpt from application.properties:

spring.data.rest.base-path=/api
server.context-path=/myapp

When I run the server, all rest endpoints are correctly mapped and reachable to /myapp/api/..., including a custom RestController I created on my own.

However:

  • at http://localhost:8080/myapp/api I can see the list of Spring Data Rest APIs (in Json format) but cannot see my custom RestController endpoints.

  • at http://localhost:8080/myapp/swagger-ui.html I see a nice gui which only lists my custom RestController and the error endpoint, not the Spring Data Rest APIs. In fact, http://localhost:8080/myapp/v2/api-docs does not make any reference to Spring Data Rest endpoints, but only to my custom RestController and to the error endpoint.

How can I fix my Spring Data Rest & Swagger configuration?

like image 331
Manu Avatar asked Jan 02 '17 10:01

Manu


People also ask

How do I enable Swagger in spring boot?

To enable the Swagger2 in Spring Boot application, you need to add the following dependencies in our build configurations file. For Gradle users, add the following dependencies in your build. gradle file. Now, add the @EnableSwagger2 annotation in your main Spring Boot application.

Is Swagger deprecated?

The Swagger API interface in the AppDynamics Platform is deprecated starting version 4.5. 15.


3 Answers

Upgrade to latest version of swagger

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-data-rest</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>

Additionally import spring data rest annotation on spring Configuration/Application class.

@Import(SpringDataRestConfiguration.class)
like image 128
jzqa Avatar answered Oct 26 '22 09:10

jzqa


Spring Data Rest support was only introduced in springfox version 2.6.0. If you follow the instructions after upgrading to the latest version of springfox (2.6.1 at the time of this writing) you shouldn't have a problem with rendering the endpoints.

like image 35
Dilip Krishnan Avatar answered Oct 26 '22 09:10

Dilip Krishnan


Did you import the configuration from springfox-data-rest? As Dilip Krishnan said, I followed the instructions and imported the configuration, adding this annotation to my Main Application class:

@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})

Hope it helps!

like image 35
alonso_50 Avatar answered Oct 26 '22 09:10

alonso_50