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})
Надеюсь, что это поможет!
Ответ 4
Но я нашел ошибку, как это. проверьте изображение
Ответ 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();
}
}