当我们需要扫描指定的包下的接口,然后生成该包下的API,那我们要怎么配置呢?
创建swagger的springboot项目
Docket.select().xxx.build()
在Docket类中有select() 方法,该方法需要与build() 一起使用。
@Beanpublic Docketdocket(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 中间配置扫描接口条件/扫描路径条件.build();// build:工厂模式}
为什么这两个方法要一起使用呢?
- select() 返回的是一个ApiSelectorBuilder对象,而我们需要的却是Docket对象,因此,ApiSelectorBuilder类中提供了一个方法 ------->build(),build() 方法返回的是一个Docket对象。
所以这两个方法需要一起使用。
配置扫描接口条件
@Beanpublic Docketdocket(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()/*
* RequestHandlerSelectors 可使用的扫描条件:
* basePackage() --- 只扫描指定路径上的类
* any() --- 扫描所有类
* withClassAnnotation() --- 通过判断类上的注解中有xxx注解扫描类
* withMethodAnnotation() --- 通过判断方法上的注解中有xxx注解扫描方法
* */.apis(RequestHandlerSelectors.basePackage("com.sky.controller"))// 让swagger只扫描 com.sky.controller 包下的api.build();}
controller 中只有一个HelloController,里面只有一个@GetMapping("/hello") 请求映射,满足com.sky.controller包条件,生成API
配置扫描路径条件
@Beanpublic Docketdocket(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()/*
* PathSelectors 可使用的 mapperHandler 路径匹配的方法:扫描匹配成功的路径,生成API
* any() --- 匹配所有的路径
* ant() --- 匹配传入参数的路径
* regex() --- 通过正则表达式匹配路径
* */.paths(PathSelectors.ant("/hello/**"))// 设置过滤的 mapperHandler 路径,满足条件则扫描api;/hello/** 包含/hello.build();}
controller中只有一个HelloController,里面只有一个@GetMapping("/hello") 请求映射,不满足/hello/** 条件,因此没有API生成。
配置扫描接口、扫描路径条件可一起使用
@Beanpublic Docketdocket(){returnnewDocket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.ant("/hello/**")).build();// build:工厂模式}
此时swagger会扫描com.sky.controller包下的类并且满足/hello/** 路径,生成API。
因为controller中只有一个HelloController,里面只有一个@GetMapping("/hello") 请求映射,满足com.sky.controller 包条件,但是不满足/hello/** 条件,因此没有API生成。