Swagger не обнаруживает Spring API Data Rest с Spring Boot

Я настраиваю проект загрузки Spring, включая Spring Data Rest и 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>

Это моя конфигурация Swagger:

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

Выдержка из application.properties:

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

Когда я запускаю сервер, все остальные конечные точки правильно отображаются и достижимы до /myapp/api/..., включая собственный пользовательский RestController, который я создал самостоятельно.

Однако:

  • at http://localhost:8080/myapp/api Я вижу список Spring Data Rest API (в формате Json), но не может видеть мои пользовательские конечные точки RestController.

  • at http://localhost:8080/myapp/swagger-ui.html Я вижу приятный gui, который отображает только мой пользовательский RestController и конечную точку ошибки, а не Spring API Data Rest. Фактически http://localhost:8080/myapp/v2/api-docs не ссылается на конечные точки Spring Data Rest, а только на мой пользовательский RestController и на конечную точку ошибки.

Как я могу исправить мою конфигурацию Data Rest и Swagger Spring?

Ответ 1

Поддержка Spring Data Rest появилась только в Springfox версии 2.6.0. Если вы будете следовать инструкциям после обновления до последней версии springfox (2.6.1 на момент написания этой статьи), у вас не должно возникнуть проблем с отображением конечных точек.

Ответ 2

Обновление до последней версии 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>

Дополнительно импортируйте аннотацию данных spring в spring класс Configuration/Application.

@Import(SpringDataRestConfiguration.class)

Ответ 3

Вы импортировали конфигурацию из Spring-Data-Rest? Как сказал Дилип Кришнан, я выполнил инструкции и импортировал конфигурацию, добавив эту аннотацию в класс основного приложения:

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

Надеюсь, что это поможет!

Ответ 5

Для пружинной загрузки 2 необходимо использовать springfox 3.0. К сожалению, на момент написания этой статьи эта версия еще не выпущена, но вы можете использовать версию со снимком.

<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>

Также вам нужно заменить @EnableSwagger2 на @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();
  }
}