package cn.com.goldenwater.dcproj.config; import cn.com.goldenwater.dcproj.constValue.SplitValue; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import springfox.documentation.RequestHandler; 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.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig extends WebMvcConfigurerAdapter { @Value("${swagger.enable}") private boolean enable; @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } @Value("${targetPackage}") private String targetPackage; @Bean public Docket dc_api() { String basePackage = "cn.com.goldenwater.dcproj.controller."; if(enable) { if (!targetPackage.startsWith(SplitValue.FENHAO_SPLIT)) { targetPackage = SplitValue.FENHAO_SPLIT + targetPackage; basePackage = targetPackage.replace(SplitValue.FENHAO_SPLIT, SplitValue.FENHAO_SPLIT + basePackage); } if (basePackage.startsWith(SplitValue.FENHAO_SPLIT)) { basePackage = basePackage.substring(1); } } return getDocket("督查全部api",basePackage+";com.workflow.bpm.api.bpmservices","系统全部api接口"); } private Docket getDocket(String groupName,String basePackage,String desc){ return new Docket(DocumentationType.SWAGGER_2).enable(enable) .groupName(groupName) .select() .apis(basePackage(basePackage)) .paths(PathSelectors.any()) .build() .apiInfo(apiInfo(desc)); } public static Predicate basePackage(final String basePackage) { return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true); } private static Function, Boolean> handlerPackage(final String basePackage) { return input -> { // 循环判断匹配 for (String strPackage : basePackage.split(SplitValue.FENHAO_SPLIT)) { boolean isMatch = input.getPackage().getName().startsWith(strPackage); if (isMatch) { return true; } } return false; }; } private static Optional> declaringClass(RequestHandler input) { return Optional.fromNullable(input.declaringClass()); } private ApiInfo apiInfo(String desc) { return new ApiInfoBuilder() .title("督查项目API") .description(desc) .version("0.0.1") .termsOfServiceUrl("http://www.goldenwater.com.cn") .license("LICENSE") .licenseUrl("http://www.goldenwater.com.cn") .build(); } }