Swagger 未检测 Spring 具有 Spring 引导的数据 Rest API
Swagger not detecting Spring Data Rest APIs with 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。
但是:
在http://localhost:8080/myapp/api
我可以看到Spring的列表
数据 Rest API(采用 Json 格式)但看不到我的自定义 RestController 端点。
在 http://localhost:8080/myapp/swagger-ui.html
我看到一个不错的图形用户界面,它只列出了我的自定义 RestController 和错误端点,而不是 Spring 数据 Rest API。事实上,http://localhost:8080/myapp/v2/api-docs 没有对 Spring Data Rest 端点进行任何引用,而只是对我的自定义 RestController 和错误端点进行引用。
如何修复我的 Spring Data Rest & Swagger 配置?
Spring Data Rest support was only introduced in springfox version 2.6.0. If you follow the instructions 升级到最新版本的 springfox(撰写本文时为 2.6.1)后,渲染端点应该没有问题。
您是否从 springfox-data-rest 导入了配置?正如 Dilip Krishnan 所说,我按照说明导入了配置,将此注释添加到我的主应用程序 class:
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
希望对您有所帮助!
升级到最新版本的 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 Configuration/Application class.
上导入 spring 数据剩余注释
@Import(SpringDataRestConfiguration.class)
对于 spring 引导 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();
}
}
我设置了一个 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。
但是:
在
http://localhost:8080/myapp/api
我可以看到Spring的列表 数据 Rest API(采用 Json 格式)但看不到我的自定义 RestController 端点。在
http://localhost:8080/myapp/swagger-ui.html
我看到一个不错的图形用户界面,它只列出了我的自定义 RestController 和错误端点,而不是 Spring 数据 Rest API。事实上,http://localhost:8080/myapp/v2/api-docs 没有对 Spring Data Rest 端点进行任何引用,而只是对我的自定义 RestController 和错误端点进行引用。
如何修复我的 Spring Data Rest & Swagger 配置?
Spring Data Rest support was only introduced in springfox version 2.6.0. If you follow the instructions 升级到最新版本的 springfox(撰写本文时为 2.6.1)后,渲染端点应该没有问题。
您是否从 springfox-data-rest 导入了配置?正如 Dilip Krishnan 所说,我按照说明导入了配置,将此注释添加到我的主应用程序 class:
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
希望对您有所帮助!
升级到最新版本的 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 Configuration/Application class.
上导入 spring 数据剩余注释@Import(SpringDataRestConfiguration.class)
对于 spring 引导 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();
}
}