Swagger not detecting Spring Data Rest APIs with Spring Boot

15,184

Solution 1

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.

Solution 2

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)

Solution 3

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!

Solution 4

For spring boot 2 you need to use springfox 3.0. Unfortunately at the time of this writing this version is not released yet but you can use the snapshot version.

<repositories>
    <repository>
      <id>jcenter-snapshots</id>
      <name>jcenter</name>
      <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
    </repository>
</repositories>

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</dependency>

Also you need to replace @EnableSwagger2 with @EnableSwagger2WebMvc.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@Configuration
@EnableSwagger2WebMvc
@Import(SpringDataRestConfiguration.class)

public class SwaggerConfig {
  @Bean
  public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();
  }
}
Share:
15,184
Manu
Author by

Manu

Software!

Updated on June 07, 2022

Comments

  • Manu
    Manu almost 2 years

    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?