web-dev-qa-db-ja.com

Spring Boot + Springbox swagger error

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

運が悪いまましばらくの間この問題を調査していて、この質問を投稿しました。質問を投稿した直後、私はこれの解決策を見つけました....(あまり良くないモーニングコーヒーのせいです)

単に@Configurationは、swagger構成クラスのアノテーションです。

ここに私が参照するリンクがあります

https://github.com/springfox/springfox/issues/462

22
jasonfungsing

私はまったく同じ問題に直面していました。これが解決策です。

これを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設定がテスト用にまったくロードされないようになります。

12
Nish

以下のようにプロファイル注釈を追加します

@Profile("dev")
@Configuration
@EnableSwagger2
public class SwaggerConfig {

swaggerが読み込まれないように、このクラスはコンパイル/ビルド/テストのライフサイクル中に呼び出されず、以下のプロパティをapplication-test.propertiesに追加します(src/test/resourcesフォルダーにまだ存在しない場合は作成します)spring.profiles.active = testで問題が解決しました。

2
user1419261