2015-01-09 17 views
14

Ich versuche, Swagger UI mit Spring Boot 1.2.1 arbeiten. Ich folgte den Anweisungen unter https://github.com/martypitt/swagger-springmvc und ich fügte @EnableSwagger auf meine Federkonfiguration hinzu.Kann Swagger UI nicht mit Spring boot

Ich bekomme derzeit JSON zurück, wenn ich zu http://localhost:8080/api-docs gehe, aber kein nettes HTML.

Ich verwende Maven und hinzugefügt, um die Abhängigkeit von Prahlerei-ui:

<dependency> 
    <groupId>org.ajar</groupId> 
    <artifactId>swagger-spring-mvc-ui</artifactId> 
    <version>0.4</version> 
</dependency> 

Dies ist meine komplette 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 nur gibt die "Whitelabel Error Page"

Aktualisierung:

Ich habe auf Github ein Testprojekt, das Problem zu zeigen: https://github.com/wimdeblauwe/springboot-swagger-test

+1

Haben Sie versucht http: // localhost: 8080/sdoc.jsp oder http: // localhost: 8080/app/sdoc.jsp? – Ron

+0

@Ron Habe es gerade versucht, funktioniert aber nicht. –

+0

Nur gefolgt, was hier geschrieben ist - https://github.com/adrianbk/swagger-springmvc-demo/tree/master/swagger-ui - wenn Sie hier keine Antwort erhalten, würde ich vorschlagen, ein Problem zu diesem Thema zu öffnen Repository. Adrian ist sehr entgegenkommend. – Ron

Antwort

1

ich das gleiche Problem haben, aber dieser Link funktioniert für mich: http://localhost:8080/sdoc.jsp

Es Pre-füllt die Ressource Feld URL Prahlerei ui mit: http://localhost:8080 $ {pageContext.request.contextPath}/api-docs

und wenn ich es bearbeiten editiere $ {pageContext.request.contextPath} und drücken Sie Explore es zeigt mir meine API doc und ich kann sogar meine Endpunkte erfolgreich versuchen. Also definitiv ein Problem, aber wahrscheinlich nicht $ {pageContext.request/contextPath} abholen.

an der Quelle der Suche die Javascript hat: url: window.location.origin + "$ {pageContext.request.contextPath}/api-docs"

auf einer statischen HTML-Prahlerei ui ich dieses Stück haben, ist codiert als:

discoveryUrl: "./ Ressource-list.json"

ich hoffe, dass dies ein wenig

hilfreich
+0

Spring Boot rendert JSPs nicht ordnungsgemäß. Siehe https://github.com/adrianbk/swagger-springmvc-demo/issues/15 –

2

ich habe Prahlerei-ui v0.4 (mit Feder V4.14 & swagger- springmvc v0.9.4) funktioniert gut, althou gh Ich hatte zunächst ähnliche Probleme. 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 relevant, was die überschriebene configureDefaultServletHandling ist. Und auf meinem Haupt-WebApplicationInitializer, ich habe:

@Import(SwaggerConfig.class) 

Schließlich befestigte ich das Problem mit dem Standort Box UI zeigt "http://localhost:8080 $ {pageContext.request.contextPath}/api-docs" durch diesen in meinen Abhängigkeiten einschließlich:

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-jasper</artifactId> 
    <!--<version>8.0.15</version>--> 
    <scope>provided</scope> 
</dependency> 

Das bietet etwas in Bezug auf JSP-Verarbeitung. Es ist in den Abhängigkeiten von spring-boot enthalten, aber es ist normalerweise nicht provided.

Hoffe, dass hilft.

9

Ihr Problem liegt in Ihrer SwaggerConfiguration Datei.Sie müssen @EnableWebMvc herausnehmen, da dies dazu führt, dass der standardmäßige Spring Boot-Ansichtsresolver durch den Standardnamen "SpringWebMvc" überschrieben wird, der statische Inhalte anders bereitstellt.

Standardmäßig wird Frühlings-Boot dienen statische Inhalte aus einem der folgenden Verzeichnisse:

  • /META-INF/resources/
  • /resources/
  • /static/
  • /public/

einschließlich Webjars.

hatte ich das gleiche Problem und ich fand dies 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 nehmen möchten, können Sie Ihre eigenen @Configuration kommentierten mit @EnableWebMvc hinzufügen. Wenn Sie die Spring Boot MVC-Funktionen beibehalten und nur eine zusätzliche MVC-Konfiguration (Interceptor, Formatierer, View-Controller usw.) hinzufügen möchten, können Sie @Bean vom Typ WebMvcConfigurerAdapter, aber ohne@EnableWebMvc hinzufügen.

Ich hoffe, das hilft.

-2

Ich würde vorschlagen, Sie @ EnableSwagger2 Tag zu verwenden und die Schritte und Code von hier folgen: https://github.com/sanketsw/SpringBoot_REST_API

Auch ich folgende Abhängigkeit verwenden, die perfekt funktioniert gut:

<dependency> 
    <groupId>io.springfox</groupId> 
    <artifactId>springfox-swagger-ui</artifactId> 
    <version>2.2.2</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>io.springfox</groupId> 
    <artifactId>springfox-swagger2</artifactId> 
    <version>2.2.2</version> 
    <scope>compile</scope> 
</dependency> 
+0

Die Verknüpfung mit externen Ressourcen ist in Ordnung, aber Links können sich dramatisch ändern oder im Laufe der Zeit vollständig unterbrochen werden. Bitte fügen Sie genügend Informationen bei, um eine Lösung in Ihrer Antwort zu implementieren, ohne sich auf externe Informationen verlassen zu müssen. –

+0

Die ausführliche Antwort ist hier: http://stackoverflow.com/questions/34307496/advice-about-swagger-api/35907962#35907962 –

-1

ich separate Konfigurations getan habe für Swagger und mein Problem war, dass ohne @EnableAutoConfiguration es nicht richtig funktionierte.

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