[英]Swagger not detecting Api built with Spring Data Rest
我正在使用 swagger 為我的 API 生成文檔的 Spring Boot 應用程序,我正在使用 Spring data rest 生成 Api,但是當我運行該應用程序時,我收到了 swagger 消息:規范中沒有定義任何操作!
這是我的 Api 代碼:
@Api(tags = "projets")
@RepositoryRestResource(collectionResourceRel = "projets", path = "projets")
public interface IProjectRepository extends JpaRepository<Project, Long> {
}
這是我的配置文件:
@Configuration
@EnableSwagger2
public class QfactoryConfiguration {
@Bean
public Docket getDocketInstance() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("Spring Boot project")
.description("Spring Boot bootstrap project")
.version("0.1")
.license("Unlicense")
.build())
.select()
.apis(RequestHandlerSelectors.basePackage("com.errabi.qfactory.repositories"))
.paths(PathSelectors.any())
.build();
}
}
這是我正在使用的依賴項:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
我問的是 Swagger 是否能夠為 Spring data rest 生成的 Api 生成文檔,或者我應該使用帶有注釋的 @RestController @Api,@ApiOperation
我使用的是 Spring Boot 版本:2.1.3.RELEASE
這對我有用,升級到 springfox 的最新快照
<dependencies>
...
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
...
</dependencies>
<repositories>
<repository>
<id>JFrog</id>
<name>JFrog Snapshot Repository</name>
<url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
</repository>
</repositories>
然后使用@EnableSwagger2WebMvc
而不是@EnableSwagger2
:
@SpringBootApplication
@EnableSwagger2WebMvc
@Import(SpringDataRestConfiguration.class)
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
這一切都歸功於Yann39 。
根據關於此springfox Github 問題的討論,您似乎需要修改配置類以包含附加注釋,即:
@Configuration
@EnableSwagger2
@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
我無法測試它,因為我目前只對 Rest 控制器使用 swagger,但希望這會有所幫助。
您是否使用最新版本的Springfox 3.0.0-SNAPSHOT深入了解此問題? 我看不到使用最新版本的Springfox和Spring Boot 2在Swagger UI中生成的Spring Data Rest端點。
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<swagger>3.0.0-SNAPSHOT</swagger>
</properties>
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-data-rest</artifactId>
<version>${swagger}</version>
</dependency>
</dependencies>
應用程序.yaml
spring:
data:
rest:
base-path: /v1
配置文件
@Configuration
@EnableSwagger2WebMvc
@Import(SpringDataRestConfiguration.class)
public class SwaggerConfig
嘗試RequestHandlerSelectors.any()
而不是RequestHandlerSelectors.basePackage("")
。
驗證您的包裹並添加
@Configuration
@EnableSwagger2
到spring boot配置文件
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("your.package.name")).paths(PathSelectors.any()).build()
.apiInfo(apiEndPointInfo());
}
只需要那些依賴項
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
你的最終配置文件應該是這樣的
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@Configuration
@EnableSwagger2
public class TestappApplication implements WebMvcConfigurer {
private static final String PREFIX = "/WEB-INF/views/";
private static final String SUFFIX = ".jsp";
public static void main(String[] args) {
SpringApplication.run(TestappApplication.class, args);
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp(PREFIX, SUFFIX);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("your.package.scan.to.swagger.annotations")).paths(PathSelectors.any()).build()
.apiInfo(apiEndPointInfo());
}
public ApiInfo apiEndPointInfo() {
return new ApiInfoBuilder().title("Spring Boot Rest API").description("user Management API")
.contact(new Contact("zouhair kasmi", "website.com/", "myemail@gmail.com"))
.license("Apache 2.0").licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
.version("0.0.1-SNAPSHOT").build();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.