Ich versuche, Swagger UI mit Spring Boot 1.2.1 zum Laufen zu bringen. Ich befolgte die Anweisungen unter https://github.com/martypitt/swagger-springmvc und fügte @EnableSwagger
Zu meiner Frühjahrskonfiguration hinzu.
Ich erhalte momentan JSON zurück, wenn ich zu http://localhost:8080/api-docs
Gehe, aber kein nettes HTML.
Ich benutze Maven und habe die Abhängigkeit von swagger-ui hinzugefügt:
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
Dies ist meine vollständige Liste der Abhängigkeiten:
<dependencies>
<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.9.4</version>
</dependency>
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Ich habe auch versucht http://localhost:8080/docs/index.html
Als URL, aber das gibt nur die "Whitelabel Error Page"
Aktualisieren:
Ich habe ein Testprojekt auf Github erstellt, um das Problem zu zeigen: https://github.com/wimdeblauwe/springboot-swagger-test
Ihr Problem liegt in Ihrer SwaggerConfiguration
-Datei. Sie müssen @EnableWebMvc
Entfernen, da dies dazu führt, dass der Standard-Spring-Boot-View-Resolver durch den Standard-SpringWebMvc-Resolver überschrieben wird, der statischen Inhalt auf andere Weise bereitstellt.
Standardmäßig stellt Spring Boot statischen Inhalt aus einem der folgenden Verzeichnisse bereit:
einschließlich Webjars.
Ich hatte das gleiche Problem und fand es in der Dokumentation: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html # boot-features-spring-mvc-auto-configuration
Wenn Sie die vollständige Kontrolle über Spring MVC übernehmen möchten, können Sie Ihren eigenen
@Configuration
Hinzufügen, der mit@EnableWebMvc
Kommentiert ist. Wenn Sie die MVC-Funktionen von Spring Boot beibehalten und nur zusätzliche MVC-Konfigurationen hinzufügen möchten (Interceptors, Formatierer, View-Controller usw.), können Sie einen eigenen@Bean
Vom TypWebMvcConfigurerAdapter
hinzufügen ohne@EnableWebMvc
.
Ich hoffe das hilft.
Ich habe swagger-ui v0.4 (mit spring v4.14 & swagger-springmvc v0.9.4) funktioniert, obwohl ich zuerst einige ähnliche Probleme hatte. Es scheint, als ob diese Klasse den Trick macht.
@Configuration
@EnableSwagger
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Autowired
private SpringSwaggerConfig springSwaggerConfig;
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(springSwaggerConfig).apiInfo(
apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfo(/* strings */);
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
Ich glaube, das Relevante ist das überschriebene configureDefaultServletHandling
. Und auf meinem Haupt WebApplicationInitializer
habe ich:
@Import(SwaggerConfig.class)
Schließlich behebte ich das Problem mit dem Standortfeld der Benutzeroberfläche, in dem " http: // localhost: 808 $ {pageContext.request.contextPath}/api-docs" angezeigt wurde, indem ich Folgendes in meine Abhängigkeiten einbaute:
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<!--<version>8.0.15</version>-->
<scope>provided</scope>
</dependency>
Das bietet etwas im Zusammenhang mit der JSP-Verarbeitung. Es ist in den Abhängigkeiten von spring-boot
Enthalten, aber normalerweise nicht provided
.
Ich hoffe, das hilft.
Ich habe das gleiche Problem, aber dieser Link funktioniert für mich: http: // localhost: 8080/sdoc.jsp
Es füllt das URL-Feld der Swagger-UI-Ressource vorab mit: http: // localhost: 808 $ {pageContext.request.contextPath}/api-docs
und wenn ich es von Hand bearbeite, indem ich $ {pageContext.request.contextPath} entferne und auf Explore drücke, wird mir mein API-Dokument angezeigt und ich kann sogar meine Endpunkte erfolgreich testen. Also definitiv ein Problem, aber wahrscheinlich nicht $ {pageContext.request/contextPath}.
Mit Blick auf die Quelle hat das Javascript: url: window.location.Origin + "$ {pageContext.request.contextPath}/api-docs"
auf einer statischen Prahlerei ui html habe ich dieses Stück wie folgt codiert:
discoveryUrl: "./ resource-list.json"
Ich hoffe das ist ein bisschen hilfreich