J'essaie de faire en sorte que Swagger UI fonctionne avec Spring Boot 1.2.1. J'ai suivi les instructions sur https://github.com/martypitt/swagger-springmvc et j'ai ajouté @EnableSwagger
sur ma config de printemps.
Je récupère actuellement JSON lorsque je vais à http://localhost:8080/api-docs
mais pas de Nice HTML.
J'utilise Maven et j'ai ajouté la dépendance à swagger-ui:
<dependency>
<groupId>org.ajar</groupId>
<artifactId>swagger-spring-mvc-ui</artifactId>
<version>0.4</version>
</dependency>
Voici ma liste complète des dépendances:
<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>
J'ai aussi essayé http://localhost:8080/docs/index.html
en tant qu'URL, mais cela donne simplement la "Page d'erreur Whitelabel"
Mise à jour:
J'ai créé un projet de test sur Github pour montrer le problème: https://github.com/wimdeblauwe/springboot-swagger-test
Votre problème réside dans votre fichier SwaggerConfiguration
. Vous devez souscrire @EnableWebMvc
, car cela entraîne le remplacement du résolveur de vue Spring Boot par défaut par celui par défaut 'SpringWebMvc' qui sert différemment le contenu statique.
Par défaut, Spring Boot servira le contenu statique de l'un des répertoires suivants:
y compris les webjars.
J'ai eu le même problème et je l'ai trouvé dans la documentation: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html # boot-features-spring-mvc-auto-configuration
Si vous souhaitez prendre le contrôle complet de Spring MVC, vous pouvez ajouter votre propre
@Configuration
annoté avec@EnableWebMvc
. Si vous souhaitez conserver les fonctionnalités Spring Boot MVC et que vous souhaitez simplement ajouter une configuration MVC supplémentaire (intercepteurs, formateurs, contrôleurs de vue, etc.), vous pouvez ajouter votre propre@Bean
de typeWebMvcConfigurerAdapter
, mais sans@EnableWebMvc
.
J'espère que ça aide.
J'ai swagger-ui v0.4 (avec spring v4.14 et swagger-springmvc v0.9.4) qui fonctionne bien, même si j'ai eu des problèmes similaires au début. Il semble que cette classe fasse l'affaire.
@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();
}
}
Je crois que la chose pertinente est le configureDefaultServletHandling
remplacé. Et sur mon WebApplicationInitializer
principal, j'ai:
@Import(SwaggerConfig.class)
Enfin, j'ai résolu le problème avec la zone d'emplacement de l'interface utilisateur affichant " http: // localhost: 808 $ {pageContext.request.contextPath}/api-docs" en l'incluant dans mes dépendances:
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<!--<version>8.0.15</version>-->
<scope>provided</scope>
</dependency>
Cela fournit quelque chose lié au traitement JSP. Il est inclus dans les dépendances de spring-boot
, mais ce n'est pas normalement provided
.
J'espère que cela pourra aider.
J'ai le même problème mais ce lien fonctionne pour moi: http: // localhost: 8080/sdoc.jsp
Il préremplit la boîte d'URL de ressource d'interface utilisateur swagger avec: http: // localhost: 808 $ {pageContext.request.contextPath}/api-docs
et quand je le modifie à la main en supprimant $ {pageContext.request.contextPath} et en appuyant sur Explorer, il me montre mon doc api et je peux même essayer mes points de terminaison avec succès. Donc, c'est définitivement un problème, mais probablement pas en récupérant $ {pageContext.request/contextPath}.
En regardant la source, le javascript a: url: window.location.Origin + "$ {pageContext.request.contextPath}/api-docs"
sur un swagger statique ui html j'ai cette pièce est codée comme:
discoveryUrl: "./ resource-list.json"
J'espère que c'est un peu utile