4
votes

Swagger ne détecte pas les API construites avec Spring Data Rest

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


0 commentaires

5 Réponses :


1
votes

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 >


3 commentaires

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



2
votes

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 .


4 commentaires

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



0
votes

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>


0 commentaires

0
votes

Essayez RequestHandlerSelectors.any () au lieu de RequestHandlerSelectors.basePackage ("") .


0 commentaires

0
votes

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());
    }


0 commentaires