web-dev-qa-db-ja.com

Swagger 2.8.0のフレンドリーなベースURLの作成方法

APIドキュメントのベースアクセスURLを変更しようとしています。 URLは " http:// localhost:8080/swagger-ui.html "です。 「 http:// localhost:8080/myapi/swagger-ui.html "のようなものを取得したいのですが。

私はSpringfox 2.8.0 Swaggerを使用しています、Java 8、Spring Boot 2.0 Swagger構成は次のとおりです。

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

カスタムパスプロバイダーの助けが必要でしたが、URL " http:// localhost:8080/swagger-ui.html "を使用してAPIドキュメントにアクセスできます。 URL " http:// localhost:8080/myapi/swagger-ui.html "を使用すると、404エラー。下のスクリーンショットを見てください。

enter image description here

6
Julia Tyrer

https://github.com/springfox/springfox/issues/225 -自分のパスへのリダイレクトを設定できると彼らが言ったように

1
Donz

SwaggerベースアクセスURLはベースアプリケーションパスから構築されます。したがって、ベースアプリケーションパスを変更すると、望ましい動作が得られますが、すべてのAPIもそのパスに変更されます。あなたはそれをここで変更する方法を見つけることができます 春のブートで残りのベースURLを設定する方法?

あなたがやったことは、ベースURLを変更するのではなく、アプリケーションから他のAPIをswaggerが呼び出す方法を変更することです。アプリケーションのベースパスを変更せずに(すべてのSwaggerリソースを手動で移動して)SwaggerベースのURLを変更するいくつかのトリックがありますが、私はそれをお勧めしません。

0
Uta Alexandru

SwaggerConfigurationを次のように編集できます:

package(RESTコントローラ)を含むものである必要があります)、Host、およびPATHを置き換えるように注意してください必要

@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/");
    }
}

別の解決策は、spring-boot URL context-pathを変更することです:

注ぎ口を編集application.propertiesファイル:

server.servlet.context-path=/myapi

または、application.ymlファイル:

server:
  servlet:
    context-path: /myapi

警告:Swaggerだけでなく、すべてのWebサービスの基本パスが変更されます

0
veben