#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
, сможете ли вы его изменить.