Как создать собственный контекстный путь для URL-адреса Swagger в приложении OpenApi 3 Spring BootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как создать собственный контекстный путь для URL-адреса Swagger в приложении OpenApi 3 Spring Boot

Сообщение Anonymous »

Я перехожу с Springfox на OpenApi3 в своем проекте Springboot, поскольку нам необходимо обновить Springboot до последней версии 2.7.0.
Мне нужно настроить собственный contextPath для различных сред, как показано ниже.
dev - https://qa.swagger.com/dev/api/myApp/sw ... index.html
qa - https://qa.swagger.com/api/myApp/swagger-ui/index.html
uat - https://uat.swagger.com/api/myApp/swagg ... dex.html#/
// pom.xml

Код: Выделить всё

org.springframework.boot
spring-boot-starter-parent
2.7.0
 



org.springdoc
springdoc-openapi-ui
1.6.8



org.springdoc
springdoc-openapi-webmvc-core
1.6.8

// Класс SwaggerConfig

Код: Выделить всё

@Configuration
@Profile({ "local", "dev", "qat", "uat" })
public class SwaggerConfig {

@Bean
public OpenAPI openAPI() {

return new OpenAPI().info(info());
}

private Info info() {
return new Info()
.title(title)
.version(version)
.license(new License().name(licenseName).url(licenseUrl));
}
}
//application.properties

Код: Выделить всё

spring.application.name=myApp
server.servlet.context-path=/api/${spring.application.name}
С помощью приведенной выше конфигурации я могу запустить Swagger, используя URL-адрес ниже, и получить весь необходимый ответ от API-интерфейса контроллера
http://localhost:8082/api/myApp/swagger-ui/index.html#/
Для настройки URL-адреса Swagger для других сред я попытался создать класс конфигурации прослушивателя, как показано ниже, который не сработал

Код: Выделить всё

@Component
public class SwaggerListener implements ApplicationListener {

final ApplicationPreparedEvent event = null;

@Override
public void onApplicationEvent(final ApplicationPreparedEvent event) {

ConfigurableEnvironment environment = event.getApplicationContext().getEnvironment();

Properties properties = new Properties();
properties.put("springdoc.swagger-ui.path", swaggerPath(event));
environment.getPropertySources().addFirst(new PropertiesPropertySource("programmatically", properties));

}

private String swaggerPath(final ApplicationPreparedEvent event) {
String basePath = null;
String swagger = "swagger-ui/index.html";
ConfigurableEnvironment environment = event.getApplicationContext().getEnvironment();
String[] profilesList = environment.getActiveProfiles();
List profiles = Arrays.asList(profilesList);
String contextPath = environment.getProperty("server.servlet.context-path");
if (profiles != null && (profiles.contains("local"))) {
basePath = swagger;
} else if (profiles != null && profiles.contains("dev")) {
basePath = "/dev/api/myApp/" + swagger;
} else if (profiles != null && (profiles.contains("qat") || profiles.contains("uat"))) {
basePath = "/api/myApp/";

}
return basePath;
}

}
Добавление вышеуказанного прослушивателя в основной класс

Код: Выделить всё

@SpringBootApplication(scanBasePackages = { "com.myApp.controller" })
@OpenAPIDefinition
public class myApi {

public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(myApi.class);
springApplication.addListeners(new SwaggerListener());
springApplication.run(args);

}

}
Приведенная выше конфигурация прослушивателя не работает
Может ли кто-нибудь мне помочь и сообщить, что мне здесь не хватает?

Подробнее здесь: https://stackoverflow.com/questions/725 ... -applicati
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»