swagger配置扫描接口、扫描路径条件

文章目录

  • 创建swagger的springboot项目
    • Docket.select().xxx.build()
    • 配置扫描接口条件
    • 配置扫描路径条件
    • 配置扫描接口、扫描路径条件可一起使用

当我们需要扫描指定的包下的接口,然后生成该包下的API,那我们要怎么配置呢?

创建swagger的springboot项目

创建项目

Docket.select().xxx.build()

在Docket类中有 select() 方法,该方法需要与 build() 一起使用。

@Bean
    public Docket docket(){
       return new Docket(DocumentationType.SWAGGER_2)
               .apiInfo(apiInfo())
               .select()
               // 中间配置扫描接口条件/扫描路径条件
               .build(); // build:工厂模式
    }

为什么这两个方法要一起使用呢?

  • select() 返回的是一个ApiSelectorBuilder对象,而我们需要的却是Docket对象,因此,ApiSelectorBuilder类中提供了一个方法 -------> build()build() 方法返回的是一个Docket对象。

所以这两个方法需要一起使用。

配置扫描接口条件

@Bean
public Docket docket(){
   return new Docket(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

swagger配置扫描接口、扫描路径条件_第1张图片

配置扫描路径条件

@Bean
public Docket docket(){
   return new Docket(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生成。

配置扫描接口、扫描路径条件可一起使用

@Bean
public Docket docket(){
   return new Docket(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生成。
swagger配置扫描接口、扫描路径条件_第2张图片

你可能感兴趣的:(Java,springboot,swagger,java,spring)