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