SpringBootプロジェクトを使用して、Springbox経由でSwaggerと統合したいと考えています。
私は私の春のブートアプリを立ち上げて、すべてうまく動かしています。
しかし、springboxを追加した後、単体テストに合格できません。
プロジェクトに追加した詳細は次のとおりです。
ために pom.xml
、追加
<!--Swagger io for API doc-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
次に、swagger構成クラスを使用します
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket booksApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/.*"))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("blah")
.description("blah.")
.termsOfServiceUrl("http://www.blah.com.au")
.contact("blah")
.build();
}
}
実行時に発生するエラーmvn clean package
は
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcRequestHandlerProvider' defined in URL [jar:file:/Users/jasonfeng/.m2/repository/io/springfox/springfox-spring-web/2.2.2/springfox-spring-web-2.2.2.jar!/springfox/documentation/spring/web/plugins/WebMvcRequestHandlerProvider.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [Java.util.List]: : No qualifying bean of type [org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping] found for dependency [collection of org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping] found for dependency [collection of org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
私が使用しているバージョンは
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
運が悪いまましばらくの間この問題を調査していて、この質問を投稿しました。質問を投稿した直後、私はこれの解決策を見つけました....(あまり良くないモーニングコーヒーのせいです)
単に@Configuration
は、swagger構成クラスのアノテーションです。
ここに私が参照するリンクがあります
私はまったく同じ問題に直面していました。これが解決策です。
これをapplication-test.propertiesに追加します(まだ存在しない場合は作成します)
spring.profiles.active=test
テストに注釈を付ける(まだ存在しない場合)
@TestPropertySource(locations = "classpath:application-test.properties")
新しいSwagger Configurationクラスを作成し、次のように注釈を付けます。
@Configuration
@EnableSwagger2
@Profile("!test")
public class SwaggerConfig {
@Bean
public Docket api() {
.........
}
}
これにより、swagger設定がテスト用にまったくロードされないようになります。
以下のようにプロファイル注釈を追加します
@Profile("dev")
@Configuration
@EnableSwagger2
public class SwaggerConfig {
swaggerが読み込まれないように、このクラスはコンパイル/ビルド/テストのライフサイクル中に呼び出されず、以下のプロパティをapplication-test.propertiesに追加します(src/test/resourcesフォルダーにまだ存在しない場合は作成します)spring.profiles.active = testで問題が解決しました。