web-dev-qa-db-fra.com

Obtention d'un résultat inattendu lors de la configuration de Swagger avec Spring Boot

Swagger étant relativement nouveau dans mon domaine, j'ai commencé à documenter très simplement mon service Web que j'ai créé avec Spring Boot.

Le problème est que, après avoir configuré swagger, dans le navigateur lorsque je tape localhost: 8080/swagger-ui.html, l'écran suivant s'affiche avec un message contextuel étrange indiquant «Impossible d'inférer l'URL de base. C'est courant lors de l’enregistrement dynamique de servlets ou lorsque l’API est derrière une passerelle d’API ". 
Je sais que cela peut sembler être une question répétée, mais je ne pouvais pas résoudre ce problème avec toutes ces réponses. Ensuite, j'ai posté la capture d'écran et le code complet là où je n'ai pas compris ce qui ne va pas. Faites-moi comprendre si je me suis trompé.

Capture d'écran:  enter image description here

Code
SwaggerConfig.Java

package com.test.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static springfox.documentation.builders.PathSelectors.regex;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .paths(regex("/greet.*"))
                .build();
    }
}

TestApplication.Java

package com.test.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages="com.test.controllers") 
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

TestController.Java

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/greet")
public class TestController {

    @RequestMapping
        public String getGreeting() {
        return "Hello There";
    }
}

Dans le code ci-dessus, SwaggerConfig.Java et TestApplication.Java appartiennent au même package, c'est-à-dire com.test.config et TestController.Java appartiennent à com.test. contrôleurs

Ceci est tout le code que j'ai et dans le pom.xml j'ai deux dépendances suivantes

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.6.1</version>
        <scope>compile</scope>
    </dependency>
7

Je rencontrais le même problème lors du déploiement de l'application Spring-Boot en tant qu'artefact de guerre. Lors de l’exécution de l’application avec Tomcat intégré (en tant qu’application autonome Spring-Boot), il fonctionnait très bien tout en déployant le fichier war sur Tomcat distant, confronté au problème susmentionné.

Sur Dig, j'ai trouvé qu'il me manquait l'initialiseur de servlet pour mon application pour les archives de guerre.

La suite a fonctionné pour moi comme un charme.

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application){ 
   return application.sources(TestApplication.class); 
   }
}
5
amit agarwal

Je l'ai résolu en ajoutant l'annotation @EnableSwagger2 sur la classe Application. 

@SpringBootApplication
@EnableSwagger2 //this
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
5

Dans mon cas, la configuration de ce haricot était source de problèmes.

@Bean
public CsvMapper csvSerializerMapper() {
    stuff()
}

Spring l’a utilisé pour initialiser jackson objectMapper pour Spring, qui échouait silencieusement . Il a été corrigé en ajoutant un haricot avec object mapper.

@Autowired
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
    return builder.createXmlMapper(false).build();
}
0
Elas

hmmm, essayez de remplacer .paths par .apis (RequestHandlerSelectors.basePackage ("package dont le contrôleur est com.demo.example.controller")). build (); donnez-lui un coup de feu et si cela ne fonctionne pas s'il vous plaît faites le moi savoir.

0
SkiiNet

si Swagger est derrière une quelconque autorisation, vous devez suivre les instructions suivantes dans Spring Boot Security

http.authorizeRequests().antMatchers("/swagger-resources/**").permitAll().anyRequest().fullyAuthenticated();

Ensuite, vous accédez à Documentation Swagger UI

0
Anand