在我的 Springboot 项目中添加 swagger3 后无法将应用程序名称添加到基本 URL

Posted

技术标签:

【中文标题】在我的 Springboot 项目中添加 swagger3 后无法将应用程序名称添加到基本 URL【英文标题】:Unable to add application name to base URL after adding swagger3 in my Springboot project 【发布时间】:2021-12-11 02:19:57 【问题描述】:

当我使用 springfox-swagger 2.9.0 时,我在我的项目中使用了以下代码。

 @Configuration
    @EnableSwagger2
    public class SwaggerConfig 
    
        @Bean
        public Docket api() 
        Docket docket = null;
    try
     if(!(profile.contains("local")|| (profile.contains("test"))
            docket = new Docket(DocumentationType.SWAGGER_2)
    .host(host)
    .pathProvider(new RelativePathProvider(servletContext)
    @Override
    public String getApplicationBasePath()
    
    return "/api";
    
    )
    .select()
    .apis(RequestHandlerSelectors.basePackage("org.app.controller"))
    .paths(PathSelectors.any())
    .build();
        
    else
    docket = new Docket(DocumentationType.SWAGGER_2)
    .host(host)
    .select()
    .apis(RequestHandlerSelectors.basePackage("org.app.controller"))
    .paths(PathSelectors.any())
    .build();
    
    
    catch(Exception e)
    logger.info("Unable to return docket",ex)
    
    return docket;
    
    

添加以下 swagger 3.0.0 依赖后,我更新的类是:

<dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>



@Configuration
public class SwaggerConfig 

    @Bean
    public Docket api() 
    Docket docket = null;
try
 if(!(profile.contains("local")|| (profile.contains("test"))
        docket = new Docket(DocumentationType.SWAGGER_2)
.host(host)
.pathProvider(new PathProvider()
@Override
public String getOperationPath(String operationPath)
return operationPath.replace("/api","");


@Override
public String getResourceListingPath(String groupName, String apiDeclaration)
return null;

)
.select()
.apis(RequestHandlerSelectors.basePackage("org.app.controller"))
.paths(PathSelectors.any())
.build();
    
else
docket = new Docket(DocumentationType.SWAGGER_2)
.host(host)
.select()
.apis(RequestHandlerSelectors.basePackage("org.app.controller"))
.paths(PathSelectors.any())
.build();


catch(Exception e)
logger.info("Unable to return docket",ex)

return docket;


使用此代码后,我无法从更新的 swagger url 将“/api”附加到我的 baseurl“localhost:8080”。 http://localhost:8080/abc-api/swagger-ui/index.html#/

基本网址应显示为“localhost:8080/api”。

我尝试为 PathProvider 实现创建单独的 bean,然后传入参数,但仍然存在同样的问题。

谁能告诉我我在这里做错了什么以及如何将baseurl创建为“/api”或“/”?

【问题讨论】:

【参考方案1】:

这不是您问题的答案,但它可能对您有所帮助。 由于无论如何您都在迁移,请考虑使用 springdoc 而不是 Springfox。它是一个较新的库,比 Springfox 更易于使用且不易出错。我们在 2 年前搬到这里,我们很高兴我们做到了。网上有很好的文档和教程:

https://springdoc.org/ https://www.baeldung.com/spring-rest-openapi-documentation

它也非常活跃,您通常会在github page 上很快得到解答。

【讨论】:

根据公司标准,必须仅在我的项目中使用 springfox。我不能简单地改变图书馆。所以寻找任何与springfox-swagger库相关的解决方案 很公平 ;) 如果你能改变它,将来考虑springdoc

以上是关于在我的 Springboot 项目中添加 swagger3 后无法将应用程序名称添加到基本 URL的主要内容,如果未能解决你的问题,请参考以下文章

在我的 Spring MVC 应用程序中实现 Spring Actuator 而不添加 Spring Boot

无法在我的 Spring Boot 项目中使用 Maven 依赖项

Spring Boot 的 CORS 问题

Golang Gin 项目使用 Swagger

swagger3.0使用及https问题处理

Java项目:轻语音乐网平台(java+Springboot+ssm+mysql+maven+jsp)