|
|
@@ -3,9 +3,14 @@ package com.cnbm.config; |
|
|
|
import com.cnbm.common.constant.Constant; |
|
|
|
import com.google.common.collect.Lists; |
|
|
|
import io.swagger.annotations.ApiOperation; |
|
|
|
import org.springframework.beans.BeansException; |
|
|
|
import org.springframework.beans.factory.config.BeanPostProcessor; |
|
|
|
import org.springframework.context.annotation.Bean; |
|
|
|
import org.springframework.context.annotation.Configuration; |
|
|
|
import org.springframework.context.annotation.Profile; |
|
|
|
import org.springframework.util.ReflectionUtils; |
|
|
|
import org.springframework.web.servlet.config.annotation.EnableWebMvc; |
|
|
|
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; |
|
|
|
import springfox.documentation.builders.ApiInfoBuilder; |
|
|
|
import springfox.documentation.builders.PathSelectors; |
|
|
|
import springfox.documentation.builders.RequestHandlerSelectors; |
|
|
@@ -14,9 +19,13 @@ import springfox.documentation.service.*; |
|
|
|
import springfox.documentation.spi.DocumentationType; |
|
|
|
import springfox.documentation.spi.service.contexts.SecurityContext; |
|
|
|
import springfox.documentation.spring.web.plugins.Docket; |
|
|
|
import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; |
|
|
|
import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; |
|
|
|
|
|
|
|
import java.lang.reflect.Field; |
|
|
|
import java.util.Arrays; |
|
|
|
import java.util.List; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
import static com.google.common.collect.Lists.newArrayList; |
|
|
|
|
|
|
@@ -28,6 +37,7 @@ import static com.google.common.collect.Lists.newArrayList; |
|
|
|
@Configuration |
|
|
|
@EnableOpenApi |
|
|
|
@Profile("dev") |
|
|
|
@EnableWebMvc |
|
|
|
public class SwaggerConfig { |
|
|
|
|
|
|
|
/** |
|
|
@@ -140,4 +150,37 @@ public class SwaggerConfig { |
|
|
|
new SecurityReference(Constant.TOKEN_HEADER, authorizationScopes)); |
|
|
|
} |
|
|
|
|
|
|
|
@Bean |
|
|
|
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { |
|
|
|
return new BeanPostProcessor() { |
|
|
|
|
|
|
|
@Override |
|
|
|
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { |
|
|
|
if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { |
|
|
|
customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); |
|
|
|
} |
|
|
|
return bean; |
|
|
|
} |
|
|
|
|
|
|
|
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) { |
|
|
|
List<T> copy = mappings.stream() |
|
|
|
.filter(mapping -> mapping.getPatternParser() == null) |
|
|
|
.collect(Collectors.toList()); |
|
|
|
mappings.clear(); |
|
|
|
mappings.addAll(copy); |
|
|
|
} |
|
|
|
|
|
|
|
@SuppressWarnings("unchecked") |
|
|
|
private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) { |
|
|
|
try { |
|
|
|
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); |
|
|
|
field.setAccessible(true); |
|
|
|
return (List<RequestMappingInfoHandlerMapping>) field.get(bean); |
|
|
|
} catch (IllegalArgumentException | IllegalAccessException e) { |
|
|
|
throw new IllegalStateException(e); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
} |