2016-11-25 6 views
0

Unnötig zu sagen, ich weiß, es gibt eine Tonne Fragen über das gleiche Thema, aber ich habe festgeklemmt versucht, dies für 2 Tage jetzt zu beheben und das meiste von dem, was ich gelesen habe, ist veraltet.Spring Swagger-ui Integration

Also ja .. das ist, was ich jetzt haben:

Gradle:

dependencies { 
compile 'org.springframework.cloud:spring-cloud-starter-hystrix' 
compile 'org.springframework.boot:spring-boot-starter-web' 
compile 'org.springframework.boot:spring-boot-starter-actuator' 
compile 'org.springframework.boot:spring-boot-starter-security' 
compile 'org.springframework.ws:spring-ws-core' 
compile 'io.springfox:springfox-swagger2:2.4.0' 
compile 'io.springfox:springfox-swagger-ui:2.4.0' 
} 

Hauptklasse:

@EnableSwagger2 
public class Application { 
public static void main(String[] args) { 
     SpringApplication.run(FeedServiceApplication.class, args); 
} 

@Bean 
public Docket swaggerSettings() { 
    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
      .apis(RequestHandlerSelectors.any()) 
      .paths(PathSelectors.any()) 
      .build() 
      .pathMapping("/"); 
} 

Als ich unter: http://localhost:8080/v2/api-docs ich die json Dokumentation erhalten Alles gut. Auch wenn ich swagger-ui von github herunterlade, stelle die Quelle auf den obigen Link und führe es auf dem Desktop aus, es funktioniert auch gut. Was nicht funktioniert, ist diese zwei Dinge zusammen zu setzen (es zur Arbeit bei http://localhost:8080/swagger-ui.html zu bringen).

Es gibt viele Tutorials wie diese, wo sie das Zeug oben behaupten wird Prahlerei-ui Arbeit machen:

http://kubecloud.io/guide-using-swagger-for-documenting-your-spring-boot-rest-api/

http://www.baeldung.com/swagger-2-documentation-for-spring-rest-api

Und eine Tonne von anderen Tutorials, wo sie Sie anweisen, Fügen Sie den Ordner dist von swagger-ui git zu Ihrem Projekt hinzu.

Kartierung auch so: nicht aktiv für den aktuellen Thread

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("**/swagger-ui.html") 
      .addResourceLocations("classpath:/META-INF/resources/"); 
    registry.addResourceHandler("**/webjars/**") 
      .addResourceLocations("classpath:/META-INF/resources/webjars/"); 
    } 
} 

als auch fehlschlägt, Scope 'Antrag' ist werfen; Ausnahme.

Nachdem ich einige Tutorials von Youtube, die oben verlinkten und viele andere versucht habe, habe ich nur "Seite nicht gefunden" gesehen. Wenn jemand erklären könnte, was ich vermisse, wäre ich sehr dankbar.

TL: DR Wie bekomme ich swagger-ui.html zum arbeiten?

EDIT: gefunden Lösung.

Falls jemand anderes darüber stolpert, besteht das Problem darin, dass, wenn Sie eine Anforderungszuordnung haben, die einen Parameter @RequestMapping("/{param}") aufnimmt, DispatcherServlet nicht mehr/** zu ResourceHttpRequestHandler mappt. Der folgende Code behebt dieses Problem.

@Configuration 
@EnableAutoConfiguration 
@EnableSwagger2 
public class SwaggerConfig extends WebMvcConfigurerAdapter{ 
    @Bean 
    public Docket api() { 
     return new Docket(DocumentationType.SWAGGER_2) 
       .select() 
       .apis(RequestHandlerSelectors.any()) 
       .paths(PathSelectors.any()).build(); 
    } 

    @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("swagger-ui.html") 
     .addResourceLocations("classpath:/META-INF/resources/"); 

     registry.addResourceHandler("/webjars/**") 
     .addResourceLocations("classpath:/META-INF/resources/webjars/"); 
    } 
} 
+0

Die Swagger-Ui, die Sie verwenden müssen, ist die, die von Springfox bereitgestellt wird und Webjar verwendet, also keine HTML- oder CSS-Dateien, die Sie manuell in Ihrer Webanwendung installieren müssen. –

+0

Danke für die Hilfe. War im selben Problem stecken geblieben. –

Antwort

0

Das ist, was wir als Setup verwenden.

@Configuration 
@EnableSwagger2 
public class SwaggerConfig { 
    @Bean 
    public Docket api() { 
    return new Docket(DocumentationType.SWAGGER_2) 
     .select() 
     .apis(RequestHandlerSelectors.any()) 
     .paths(Predicates.not(PathSelectors.regex("/error"))) 
     .build() 
     .apiInfo(apiInfo()); 
    } 
    private ApiInfo apiInfo() { 
    return new ApiInfo(
     "APP NAME", 
     "APP DESCRIPTION", 
     "1.0", 
     null, 
     new Contact("Firstname Lastname", null, "[email protected]"), 
    null, 
    null); 

} }

+0

Danke für die Antwort. Versucht dies auch, aber es gibt keinen Endpunkt für die UI. – Rauno

+0

An welcher Adresse suchen Sie? Sie scheinen v2 dort hinzuzufügen, unsere Swagger-GUI befindet sich auf dem Host: 8050/swagger-ui.html, wobei 8050 der Port ist, der ausgesetzt ist. – hecko84

+0

Ich schaue auf /swagger-ui.html und v2/swagger-ui.html aber ich sehe alle Endpunkte in der Konsole (zum Beispiel sehe ich v2/api-docs ganz gut) und es gibt keinen Endpunkt für die ui. – Rauno

0
<dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger2</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-swagger-ui</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-spi</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-core</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-spring-web --> 
    <dependency> 
     <groupId>io.springfox</groupId> 
     <artifactId>springfox-spring-web</artifactId> 
     <version>${swagger.version}</version> 
    </dependency> 

Konvertieren der oben Abhängigkeit Gradle Eine Klasse für ihre eigenen mit @Configuration kommentiert. Version i verwendet wird, ist 2.3.1

package XXXX; 

import springfox.documentation.swagger2.annotations.EnableSwagger2; 

@EnableSwagger2 
public class SwaggerConfiguration { 

} 

Wir haben die Swagger Config aktiviert wie oben angegeben.

können Sie Docket hinzufügen Bohne für benutzerdefinierte Header:

@Bean 
    public Docket docket() { 

Parameter parameterAuthorization = 
     new ParameterBuilder().name("Authorization").description("Authentication of the API User") 
      .modelRef(new ModelRef("string")).parameterType("header").required(true).build(); 

    Parameter parameterClientUserId = 
     new ParameterBuilder().name("user_id").description("Client user identifier") 
      .modelRef(new ModelRef("string")).parameterType("header").required(true).build(); 

    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()) 
     .paths(PathSelectors.any()).build() 
     .globalOperationParameters(Lists.newArrayList(parameterClientUserId, parameterAuthorization)); 
    } 

Und schließlich importieren Sie die Swagger config in Hauptanwendungsklasse auf Frühling Boot

@Import ({SwaggerConfiguration.class})

+0

Danke für die Antwort. Versucht dies, aber immer noch keinen Endpunkt für die UI. – Rauno