web-dev-qa-db-fra.com

comment faire une URL de base conviviale pour swagger 2.8.0

J'essaie de modifier l'URL d'accès de base pour la documentation de l'API. L'URL est " http: // localhost: 8080/swagger-ui.html ". Je veux obtenir quelque chose comme " http: // localhost: 8080/myapi/swagger-ui.html ".

J'utilise Springfox 2.8.0 Swagger, Java 8, Spring Boot 2.0 La configuration de swagger est:

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

    @Bean
    public Docket api(ServletContext servletContext) {
        return new Docket(DocumentationType.SWAGGER_2)
                .pathProvider(new RelativePathProvider(servletContext) {
                    @Override
                    public String getApplicationBasePath() {
                        return "/myapi";
                    }
                })
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(Predicates.not(PathSelectors.regex("/error")))
                .build()
                .useDefaultResponseMessages(false);
    }
}

Le fournisseur de chemin personnalisé a dû aider, mais j'ai toujours accès à la documentation de l'API en utilisant l'url " http: // localhost: 8080/swagger-ui.html ". Si j'utilise l'url " http: // localhost: 8080/myapi/swagger-ui.html ", j'obtiens une erreur 404 . Regardez la capture d'écran ci-dessous.

enter image description here

6
Julia Tyrer

https://github.com/springfox/springfox/issues/225 - comme ils l'ont dit, vous pouvez configurer la redirection vers votre propre chemin

1
Donz

L'URL d'accès de base Swagger est construite à partir du chemin de votre application de base. Si vous changez le chemin de votre application de base, vous obtiendrez le comportement souhaité. Vous pouvez trouver comment le changer ici Comment définir l'URL de base pour le repos dans la botte de printemps? .

Ce que vous avez fait était trop de changer la façon dont Swagger appelle les autres API de votre application, pas de changer son URL de base. Il y a quelques astuces pour changer l'URL de base de swagger sans changer le chemin de base de l'application (déplacer manuellement toutes les ressources de swagger), mais je ne le recommande pas.

0
Uta Alexandru

Vous pouvez éditer votre SwaggerConfiguration comme ça:

Prenez soin de remplacer le package (qui doit être celui contenant vos REST), le Host et le PATH vous avoir besoin

@Configuration
@EnableSwagger2
public class SwaggerConfiguration implements WebMvcConfigurer {

    public static final String PATH = "/myapi";

    @Bean
    public Docket api() {
        final var package = "com.Julia.rest";
        final var Host = "localhost:8080";

        return new Docket(DocumentationType.SWAGGER_2)
                .Host(host)
                .select()
                .apis(RequestHandlerSelectors.basePackage(package))
                .paths(PathSelectors.any())
                .build();
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        final var apiDocs = "/v2/api-docs";
        final var configUi = "/swagger-resources/configuration/ui";
        final var configSecurity = "/swagger-resources/configuration/security";
        final var resources = "/swagger-resources";

        registry.addRedirectViewController(PATH + apiDocs, apiDocs).setKeepQueryParams(true);
        registry.addRedirectViewController(PATH + resources, resources);
        registry.addRedirectViewController(PATH + configUi, configUi);
        registry.addRedirectViewController(PATH + configSecurity, configSecurity);
        registry.addRedirectViewController(PATH, "/");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(PATH + "/**").addResourceLocations("classpath:/META-INF/resources/");
    }
}

Une autre solution consiste à modifier l'URL Spring-boot context-path:

Modifier pour application.properties fichier:

server.servlet.context-path=/myapi

Ou si vous avez un application.yml fichier:

server:
  servlet:
    context-path: /myapi

Attention: Cela changera le chemin de base de tous vos services Web, pas seulement Swagger

0
veben