Je travaille sur une application Spring Boot en utilisant swagger pour générer des documents pour mon API, j'utilise Spring data rest pour générer l'API mais lorsque j'exécute l'application, je reçois le message swagger: Aucune opération définie dans les spécifications!
Voici mon code Api:
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-data-rest</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
Et voici mon fichier de configuration:
@Configuration @EnableSwagger2 public class QfactoryConfiguration { @Bean public Docket getDocketInstance() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(new ApiInfoBuilder() .title("Spring Boot project") .description("Spring Boot bootstrap project") .version("0.1") .license("Unlicense") .build()) .select() .apis(RequestHandlerSelectors.basePackage("com.errabi.qfactory.repositories")) .paths(PathSelectors.any()) .build(); } }
Et voici les dépendances que j'utilise:
@Api(tags = "projets") @RepositoryRestResource(collectionResourceRel = "projets", path = "projets") public interface IProjectRepository extends JpaRepository<Project, Long> { }
Je demande si Swagger est capable de générer des documents pour Api générés par Spring Data Rest ou je devrais utiliser un @RestController avec annotations @ Api, @ ApiOperation
J'utilise la version Spring Boot: 2.1.3.RELEASE
5 Réponses :
D'après les discussions sur ce problème de Springfox Github semble devoir être modifié votre classe de configuration pour inclure une annotation supplémentaire, c'est-à-dire:
@Configuration @EnableSwagger2 @Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
Je ne peux pas la tester car je n'utilise pour l'instant que swagger pour les contrôleurs Rest mais j'espère que cela vous aidera.
p >
J'ai ajouté SpringDataRestConfiguration et l'application échoue au démarrage de la recherche sur l'erreur J'ai trouvé que Swagger n'est pas compatible avec spring boot 2.X this the erro Corrigez le classpath de votre application afin qu'il contienne une version unique et compatible de org.springframework .data.repository.support.Repositories
À quoi ressemble le reste de votre POM?
@ EnableSwagger2WebMvc est obsolète, c'est correct ce que vous avez fait
Cela a fait l'affaire pour moi, en passant au dernier instantané de springfox
@SpringBootApplication @EnableSwagger2WebMvc @Import(SpringDataRestConfiguration.class) public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
Ensuite, utilisez @ EnableSwagger2WebMvc
au lieu de @ EnableSwagger2
:
<dependencies> ... <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0-SNAPSHOT</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-data-rest</artifactId> <version>3.0.0-SNAPSHOT</version> </dependency> ... </dependencies> <repositories> <repository> <id>JFrog</id> <name>JFrog Snapshot Repository</name> <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url> </repository> </repositories>
Merci à Yann39 .
Je suis également confronté au même problème. L'interface utilisateur Swagger n'affiche pas le point de terminaison par défaut disponible par l'annotation RepositoryRestResource. J'ai passé une journée entière là-dessus. Correction de certains problèmes en pointant vers l'instantané 3.0.0. Mais toujours, je ne vois pas les points de terminaison affichés dans l'interface utilisateur swagger. Je ne peux voir que les points de terminaison @RestController. Faites-moi savoir si cela fonctionne pour vous.
Je suis sur Spring 2.2.2.RELEASE - il semble que SpringDataRestConfiguration
a été supprimé. Ou renommé? Des idées? Voir stackoverflow.com/questions/59868163/…
Même moi, je suis également confronté au même problème. J'utilise Spring Boot 2.2.2.RELEASE, ajout de la dépendance SpringFox 3.0.0-SNAPSHOT. Lorsque j'essaye d'accéder à la page swagger-ui.html, j'obtiens une page d'erreur Whitelabel.
Avez-vous activé une sécurité? avez-vous quelque chose sur la console indiquant des détails?! vous pouvez vérifier ce problème et ses réponses connexes si vous rencontrez le même type d'exception. stackoverflow.com/a/57342184/9019797
pom.xml
@Configuration @EnableSwagger2WebMvc @Import(SpringDataRestConfiguration.class) public class SwaggerConfig
application.yaml
spring: data: rest: base-path: /v1
configuration java
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <swagger>3.0.0-SNAPSHOT</swagger> </properties> <dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-data-rest</artifactId> <version>${swagger}</version> </dependency> </dependencies>
Essayez RequestHandlerSelectors.any ()
au lieu de RequestHandlerSelectors.basePackage ("")
.
Vérifiez votre package et ajoutez
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @SpringBootApplication @Configuration @EnableSwagger2 public class TestappApplication implements WebMvcConfigurer { private static final String PREFIX = "/WEB-INF/views/"; private static final String SUFFIX = ".jsp"; public static void main(String[] args) { SpringApplication.run(TestappApplication.class, args); } @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp(PREFIX, SUFFIX); } @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2).select() .apis(RequestHandlerSelectors.basePackage("your.package.scan.to.swagger.annotations")).paths(PathSelectors.any()).build() .apiInfo(apiEndPointInfo()); } public ApiInfo apiEndPointInfo() { return new ApiInfoBuilder().title("Spring Boot Rest API").description("user Management API") .contact(new Contact("zouhair kasmi", "website.com/", "myemail@gmail.com")) .license("Apache 2.0").licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") .version("0.0.1-SNAPSHOT").build(); } }
au fichier de configuration de spring boot
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
seules ces dépendances sont requises
XXX
votre fichier de configuration final devrait ressembler à ceci
@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2).select() .apis(RequestHandlerSelectors.basePackage("your.package.name")).paths(PathSelectors.any()).build() .apiInfo(apiEndPointInfo()); }