如何更改 Springfox Swagger 2.0 的 basePath

我正在运行一个服务,其中Swagger UI可在以下位置访问:

http://serviceURL/swagger-ui.html

但是,它位于代理后面,例如:

http://proxyURL/serviceName

Swagger UI 生成的 URL 如下所示:

http://proxyURL/

而不是以服务名称作为后缀的实际 URL。据我所知,这意味着操作 basePath 属性。根据文档:

swagger API 文档无法再描述不同基本路径上的操作。在 1.2 及更早版本中,每个资源都可以有一个单独的 basePath。在 2.0 中,为整个规范定义了 basePath 等效项(schemes+host+basePath)。

@Api(basePath)已被弃用,它没有说明使用什么以及如何使用它。如何使Swagger生成的路径正确显示?

我正在使用Spring Boot,Springfox Swagger和注释。


答案 1
@Bean
public Docket newsApi(ServletContext servletContext) {
    return new Docket(DocumentationType.SWAGGER_2).pathProvider(new RelativePathProvider(servletContext) {
        @Override
        public String getApplicationBasePath() {
            return "/serviceName" + super.getApplicationBasePath();
        }
    }).host("proxyURL");
}

答案 2

您可以像这样编辑您的SwaggerConfiguration

注意替换(需要是包含 REST 控制器的控制器)、和您需要的packagehostPATH

@Configuration
@EnableSwagger2
public class SwaggerConfiguration implements WebMvcConfigurer {

    public static final String PATH = "/serviceName";

    @Bean
    public Docket api() {
        final var package = "com.martin.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 上下文路径

编辑 pour 文件:application.properties

server.servlet.context-path=/serviceName

或者,如果您有文件:application.yml

server:
  servlet:
    context-path: /serviceName

警告:它将更改所有 Web 服务的基本路径,而不仅仅是 Swagger


推荐