2015-09-08 7 views
7

Ho un progetto di avvio a molla che si desidera integrare con swagger tramite springbox.Spring Boot + Spring swagger error

Ho la mia app per l'avvio a molla funzionante.

Tuttavia, dopo aver aggiunto springbox, non è possibile superare il test dell'unità.

Ecco i dettagli che ho aggiunto nel progetto.

Per pom.xml, ha aggiunto

<!--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> 

poi con una classe di spavalderia config

@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(); 
} 

} 

L'errore che sto ottenendo quando viene eseguito 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: {} 

la versione che sto usando è

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.5.RELEASE</version> 
</parent> 

risposta

13

State esaminando questo problema per un po 'di tempo senza fortuna, quindi ho postato questa domanda. Subito dopo aver postato la domanda, ho scoperto la soluzione per questo ..... (incolpare il non-buongiorno caffè)

Basta rimuovere l'annotazione @Configuration nella classe di configurazione swagger.

ecco il link mi riferisco a

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

+1

grazie per condividere il follow-up – fehguy

+0

è possibile ottenere questo utilizzando la risposta di @Nish –

+0

Quando ho rimosso l'annotazione di configurazione, quindi ho ottenuto pop-up: "Impossibile dedurre l'URL di base. Questo è comune quando si utilizza il servlet dinamico registrazione o quando l'API è dietro un gateway API. L'URL di base è la radice di dove vengono servite tutte le risorse di swagger ". La soluzione sotto con i profili ha funzionato. – Maksim

4

stavo affrontando lo stesso problema esatto. Ecco la soluzione.

Aggiungi questo al application-test.properties (crearne uno se non è già presente)

spring.profiles.active=test 

annotare il test (se non è già presente)

@TestPropertySource(locations = "classpath:application-test.properties") 

Creare una nuova classe di configurazione e Swagger annotarlo come segue:

@Configuration 
@EnableSwagger2 
@Profile("!test") 
public class SwaggerConfig { 
    @Bean 
    public Docket api() { 
     ......... 
    } 
} 

Questo farà sì che swagger config non è stato caricato per la prova.

+0

Che cosa significa @TestPropertySource? – fiddle

+0

Viene utilizzato per sovrascrivere le proprietà caricate dal contesto dell'applicazione per i test. Puoi guardare la documentazione di primavera per capirlo ulteriormente. – Nish

+0

grandi cose esattamente quello che stavo cercando. –