package com.ssi.config; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.google.common.base.Function; import springfox.documentation.RequestHandler; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.ArrayList; import java.util.List; /** * Swagger API配置 * @author xiaofan * @email ssi-zhangxf@dfmc.com.cn * @date 2020-01-22 09:22:23 */ @Configuration @EnableSwagger2 public class SwaggerConfig { // 定义分隔符 private static final String splitor = ";"; @Bean public Docket createRestApi() { ParameterBuilder ticketPar = new ParameterBuilder(); List pars = new ArrayList(); ticketPar.name("Authorization").description("认证token") .modelRef(new ModelRef("string")).parameterType("header") .required(false).build(); //header中的ticket参数非必填,传空也可以 pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数 return new Docket(DocumentationType.SWAGGER_2).apiInfo(this.apiInfo()).groupName("SSI") .useDefaultResponseMessages(false).enableUrlTemplating(false).select() .apis(basePackage("com.ssi.controller")).paths(PathSelectors.any()) .build() .globalOperationParameters(pars); } private ApiInfo apiInfo() { return new ApiInfoBuilder().title("Spring Boot Swagger2").description("SSI-API") .termsOfServiceUrl("http://127.0.0.1:8087/").version("0.0.1").build(); } 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(splitor)) { boolean isMatch = input.getPackage().getName().startsWith(strPackage); if (isMatch) { return true; } } return false; }; } private static Optional> declaringClass(RequestHandler input) { return Optional.fromNullable(input.declaringClass()); } }