API接口类没有能都放在同一个包下,是按功能模块分的,所以涉及多包扫描的问题,贴出来解决办法
Swagger在POM配置好后,修改SwaggerConfig类,我只贴出要修改的,直接用
//swagger2的配置文件,在项目的启动类的同级文件建立
@Configuration
@EnableSwagger2
//是否开启swagger,正式环境一般是需要关闭的(避免不必要的漏洞暴露!),可根据springboot的多环境配置进行设置
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class Swagger2 {
// 定义分隔符
private static final String splitor = ";";
// swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// 为当前包路径
.apis(basePackage("com.xxx.xxx.modules.permission.controller"
+ splitor +
"com.xxx.xxx.controller"
+ splitor +
"com.xxx.xxx.modules.sys.controller"))
.paths(PathSelectors.any())
.build();
}
// 构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 页面标题
.title("测试使用 RESTful API 文档")
// 创建人信息
.contact(new Contact("woody", "https://", "xxxxx@qq.com"))
// 版本号
.version("1.0")
// 描述
.description("测试设备连接,API文档")
.build();
}
/**
* 重写basePackage方法,使能够实现多包访问,复制贴上去
*/
public static Predicate<RequestHandler> basePackage(final String basePackage) {
return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
}
private static Function<Class<?>, 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<? extends Class<?>> declaringClass(RequestHandler input) {
return Optional.fromNullable(input.declaringClass());
}
/**
* swagger2原始ui
* http://localhost:8080/swagger-ui.html
*
* swagger-ui-layer访问ui
* http://localhost:8080/docs.html
*/
}