Swagger如何匹配多个Controller类或者目录

提示: 方法四 或许是你们需要的方法!!!

方法一(最普通的方式):匹配一个controller目录下的所有controller类

@Bean
    public Docket creatRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //关键语句
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")
                )
                .paths(PathSelectors.any())
                .build();
    }

方法二 :匹配有指定注解的类

@Bean
    public Docket creatRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //关键语句
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)
                )
                .paths(PathSelectors.any())
                .build();
    }

方法三 :匹配有指定注解的方法

@Bean
    public Docket creatRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //关键语句
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)
                )
                .paths(PathSelectors.any())
                .build();
    }

方法四 : 我觉得是最重要的方法 (强烈推荐!!!!)

可以匹配多个controller包(多个controller包不在同一级)

@Bean
    public Docket creatRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(Predicates.or(RequestHandlerSelectors.basePackage("com.example.demo.controller"),
                        RequestHandlerSelectors.basePackage("com.example.demo.gp.controller"),
                        RequestHandlerSelectors.basePackage("com.gp.callback.controller"))
                )
                .paths(PathSelectors.any())
                .build();

    }

如果上面的Predicates类报红的话,pom文件导入jar包

<!-- guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>

总结:相比四种方法,如果项目中只有一个controller包的话,直接使用方法一就可以了,如果项目中有多个controller包,那么我建议使用方法四。


原文:Swagger如何匹配多个Controller类或者目录 - IUReady - 博客园