Swagger Setting on Spring Boot with New Servlet Context
1. add dependencies
implementation("io.springfox:springfox-swagger2:${swagger2Version}") implementation("io.springfox:springfox-swagger-ui:${swagger2Version}")
2. determine prefix ("/apigw" in this case) for new context and add setting in SpringBootApplication or other configuration
@SpringBootApplication(scanBasePackageClasses = ...) public class PartnerControllerApplication { public static void main(final String[] args) { ... } @Bean public ServletRegistrationBean<DispatcherServlet> apigw() { val applicationContext = new AnnotationConfigWebApplicationContext(); // val from lombok applicationContext.register(ApiGwWebMvcConfig.class); val dispatcherServlet = new DispatcherServlet(); dispatcherServlet.setApplicationContext(applicationContext); val servletRegistrationBean = new ServletRegistrationBean<>(dispatcherServlet, "/apigw/*"); servletRegistrationBean.setName("apigw"); return servletRegistrationBean; } ...
3. write ApiGwWebMvcConfig.java for new context
@Configuration @ComponentScan(basePackageClasses = ApiGwControllerPackage.class) @Import({Swagger2Config.class}) public class ApiGwWebMvcConfig extends WebMvcConfigurationSupport { @Override public void addResourceHandlers(ResourceHandlerRegistry resourceHandlerRegistry) { resourceHandlerRegistry .addResourceHandler("/swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/") .setCachePeriod(0); resourceHandlerRegistry .addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(0); } }
4. write Swagger2Config.java for swagger setting
@Configuration @EnableSwagger2 public class Swagger2Config { private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("My API") .version("1.0.0") .build(); } @Bean public Docket getDocketDefault() { return new Docket(DocumentationType.SWAGGER_2) .pathMapping("/") .forCodeGeneration(true) .apiInfo(apiInfo()); } }