多个包扫描路劲匹配
package com.gponline.crm.web.config;
import com.google.common.base.Predicates;
import com.gponline.crm.web.utils.ConfigUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.builders.RequestHandlerSelectors;
/**
* swagger配置
* Created by stav on 2020/5/13.
*/
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(Predicates.or(RequestHandlerSelectors.basePackage("com.web.controller"),RequestHandlerSelectors.basePackage("com.api.controller")))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("gponline crm接口文档")
.description("接口文档")
.version("1.0")
.build();
}
}
动态写法:
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(resolve("com.xx,com.xx")).paths(PathSelectors.any()).build();
}
/**
* Predicate that matches RequestHandler with given base package name for the class of the handler method.
* This predicate includes all request handlers matching the provided basePackage
*
* @param basePackage - base package of the classes
* @return this
*/
public static Predicate<RequestHandler> resolve(final String basePackage) {
return new Predicate<RequestHandler>() {
@Override
public boolean apply(RequestHandler input) {
return declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
};
}
/**
* 处理包路径配置规则,支持多路径扫描匹配以逗号隔开
*
* @param basePackage 扫描包路径
* @return Function
*/
private static Function<Class<?>, Boolean> handlerPackage(final String basePackage) {
return new Function<Class<?>, Boolean>() {
@Override
public Boolean apply(Class<?> input) {
for (String strPackage : basePackage.split(",")) {
boolean isMatch = input.getPackage().getName().startsWith(strPackage);
if (isMatch) {
return true;
}
}
return false;
}
};
}
/**
* @param input RequestHandler
* @return Optional
*/
private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
@Bean
public ApiInfo apiInfo() {
return new ApiInfoBuilder().title(title)
.description("更多Swagger2配置相关文章请关注:https://springfox.github.io/springfox/docs/current/")
.termsOfServiceUrl("https://springfox.github.io/springfox/docs/current/").version("1.0").build();
}
注解写法:
.apis(Predicates.or(RequestHandlerSelectors.withClassAnnotation(RestController.class),RequestHandlerSelectors.withClassAnnotation(Controller.class)))
版权声明:本文为weixin_41725792原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。