Все примеры и учебные пособия посвящены использованию SpringFox непосредственно в SpringApplication. В моем случае я хочу реализовать это в проекте подмодуля Maven. Мое основное приложение Spring находится в другом модуле maven.
Мое основное приложение Spring работает успешно, так как требуемое приложение работает в порту 8080, как и ожидалось.
Для моего требования я использовал ApplicationRunner в моем подмодуле maven. Когда основное приложение Spring запускается, я могу выполнить метод run (), что подтверждается журналами. Но конечные точки Swagger http://localhost:8088/v2/api-docs?group=test и http://localhost:8088/swagger-ui.html недоступны.
Бегунок выполнен, но SpringFox не инициализирован. Как запустить реализацию swagger при запуске через ApplicationRunner или CommandLineRunner?
Я использую SpringFox v3.0 Snapshot.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.annotations.ApiIgnore;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@EnableSwagger2WebMvc
@EnableWebMvc
@Configuration
public class SwaggerApplication extends WebMvcConfigurationSupport
implements ApplicationRunner {
Logger LOGGER = LoggerFactory.getLogger(SwaggerApplication.class);
@Bean
public Docket servicesApi() {
return new Docket(DocumentationType.SWAGGER_2)
.host("localhost:8088")
.groupName("test")
.apiInfo(apiInfo())
.pathMapping("/")
.select()
.paths(PathSelectors.any())
.build()
.ignoredParameterTypes(ApiIgnore.class)
.enableUrlTemplating(true);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger for Virtual Service API")
.description("Swagger Implementation for Virtual Services")
.version("2.0")
.build();
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
System.out.println("In addResourceHandlers");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Override
public void run(ApplicationArguments args) throws Exception {
LOGGER.info("Swagger Starting"); //This works
}
}
Я не буду использовать обычный способ использования аннотаций для использования SpringFox. Я буду создавать Swagger API во время выполнения.