swagger多包扫描

时间:2025-03-21 09:47:34
import com.google.common.base.Function; import com.google.common.base.Optional; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.RequestHandler; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import java.util.function.Predicate; @Configuration public class SwaggerConfig @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息) .apiInfo(apiInfo()) // 设置哪些接口暴露给Swagger展示 .select() // 扫描指定包的接口 // 只支持一个包路径 //.apis(("")) // 多包扫描 .apis(basePackage(".xxx1", ".xxx2")) // 扫描所有 .apis(()) .paths(PathSelectors.any()) .build(); } private static Predicate<RequestHandler> basePackage(String... basePackages) { return input -> declaringClass(input).transform(handlerPackage(basePackages)).or(true); } private static Optional<? extends Class<?>> declaringClass(RequestHandler input) { return Optional.fromNullable(input.declaringClass()); } private static Function<Class<?>, Boolean> handlerPackage(String[] basePackage) { return input -> { // 循环判断匹配 for (String strPackage : basePackage) { boolean isMatch = input.getPackage().getName().startsWith(strPackage); if (isMatch) { return true; } } return false; }; } /** * 添加摘要信息 */ private ApiInfo apiInfo() { // 用ApiInfoBuilder进行定制 return new ApiInfoBuilder() // 设置标题 .title("标题:xxx系统_接口文档") // 描述 .description("描述:用于管理xxxxx信息,具体包括XXX,XXX模块...") // 作者信息 .contact(new Contact("xxxx", null, null)) // 版本 .version("版本号:" + "1.0") .build(); }