Невозможно добавить имя приложения в базовый URL-адрес после добавления swagger3 в мой проект Springboot

#spring-boot #version #pom.xml #springfox-boot-starter

Вопрос:

Когда я использовал 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;
}
}
 

После использования этого кода я не могу добавить «/ api» к моему базовому «localhost: 8080» с обновленного URL-адреса swagger.
http://localhost:8080/abc-api/swagger-ui/index.html#/

Базовый URL-адрес должен отображаться как «localhost: 8080 / api».

Я попытался создать отдельный компонент для реализации PathProvider, а затем передал в качестве аргумента, но проблема все та же.

Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю не так и как создать baseurl как «/ api» вместо или «/»?

Ответ №1:

Это не ответ на вашу проблему, но это может вам помочь. Поскольку вы все равно выполняете миграцию, рассмотрите возможность использования springdoc вместо Springfox. Это более новая библиотека, которая проще в использовании и менее подвержена ошибкам, чем Springfox. Мы перешли на него 2 года назад, и мы очень рады, что сделали. Для этого есть очень хорошая документация и учебные пособия в Интернете:

Он также очень активен, и вы обычно очень быстро получаете ответы на свои вопросы на странице github.

Комментарии:

1. В соответствии со стандартами компании springfox обязательно использовать только в моем проекте. Я не могу просто изменить библиотеку. Итак, ищете какое-либо решение, связанное с библиотекой springfox-swagger

2. Достаточно справедливо 😉 В будущем подумайте springdoc , сможете ли вы его изменить.