| package com.vincent.rsf.server.common.config; | 
|   | 
| import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; | 
| import io.swagger.annotations.Api; | 
| import org.springframework.beans.BeansException; | 
| import org.springframework.beans.factory.annotation.Value; | 
| import org.springframework.beans.factory.config.BeanPostProcessor; | 
| import org.springframework.context.annotation.Bean; | 
| import org.springframework.context.annotation.Configuration; | 
| import org.springframework.util.ReflectionUtils; | 
| import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; | 
| import springfox.documentation.builders.ApiInfoBuilder; | 
| import springfox.documentation.builders.PathSelectors; | 
| import springfox.documentation.builders.RequestHandlerSelectors; | 
| import springfox.documentation.oas.annotations.EnableOpenApi; | 
| import springfox.documentation.service.ApiInfo; | 
| import springfox.documentation.spi.DocumentationType; | 
| 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.List; | 
| import java.util.stream.Collectors; | 
|   | 
|   | 
| @Configuration | 
| @EnableKnife4j | 
| @EnableOpenApi | 
| public class SwaggerConfig { | 
|   | 
|     @Value("${spring.profiles.active}") | 
|     private String active; | 
|   | 
|     @Bean | 
|     public Docket docket() { | 
|         Docket docket = new Docket(DocumentationType.OAS_30) | 
|                 .apiInfo(apiInfo()) | 
|                 .enable("dev".equals(active)) | 
|                 .groupName("测试分组") | 
|                 .select() | 
|                 //apis: 添加swagger接口提取范围 | 
|                 .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) | 
|                 .paths(PathSelectors.any()) | 
|                 .build() | 
|                 ; | 
|   | 
|         return docket; | 
|     } | 
|   | 
|     private ApiInfo apiInfo() { | 
|         return new ApiInfoBuilder() | 
|                 .title("WMS标版1.0版本接口文档") | 
|                 .description("WMS标版1.0版本接口文档,技术栈主要包括:SpringBoot、React.js、MySQL5.7") | 
|                 .version("v1.0") | 
|                 .build(); | 
|     } | 
|   | 
|     @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); | 
|                 } | 
|             } | 
|         }; | 
|     } | 
|   | 
| } |