59

有没有办法可以从 springfox swagger-ui 中删除“基本错误控制器”?

图片:

在此处输入图像描述

4

8 回答 8

102

您可以限制请求处理程序选择器仅扫描项目的包:

    return new Docket( DocumentationType.SWAGGER_2)
        .select()
        .apis( RequestHandlerSelectors.basePackage( "your package" ) )
        ...
于 2015-11-15T14:34:27.270 回答
43

我认为,最优雅的解决方案是仅将@RestController控制器包含在 swagger 中,唯一要记住的是,使用该注释对所有 REST 控制器进行注释:

new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
            .paths(PathSelectors.any())
            .build();

正如BasicErrorController仅注释的那样@Controller,swagger 将避免BasicErrorController在定义文件中。当然,您可以使用自定义注释而不是@RestController将 REST 控制器标记为符合 swagger 条件的控制器。

于 2019-01-07T21:41:09.357 回答
25
  • 可以使用Predicate.not()来完成。

     @Bean
     public Docket api() {
         return new Docket(DocumentationType.SWAGGER_2)
             .select()
             .apis(RequestHandlerSelectors.any())
             .paths(PathSelectors.any())
             .paths(Predicate.not(PathSelectors.regex("/error.*")))
             .build();
     }
    
于 2018-03-05T05:52:22.267 回答
9

例如,如果您的父包是 com.app.microservice

package com.app.microservice;

然后使用下面的代码,它将只显示包中的控制器并禁用/排除其他控制器

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.app.microservice"))
                .build();
    }

在此处输入图像描述

于 2019-02-17T05:44:24.757 回答
5

U也可以使用springfox-swagger2注解。springfox.documentation.annotations.ApiIgnore

@ApiIgnore
public class ErrorController {

这将从文档中排除该类。

于 2016-11-21T10:41:42.203 回答
2

我的问题只是我忘了用@Bean 注释 Docket api() 方法。

于 2020-02-01T02:19:52.807 回答
1

这可以通过将@Bean定义移动到主类(带有 的那个@SpringBootApplication)并使用它this.getClass().getPackageName()来完成basePackage()

@Bean
public Docket swagger() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage(this.getClass().getPackageName()))
            .paths(PathSelectors.any())
            .build()
            .useDefaultResponseMessages(false);
}
于 2019-12-10T17:20:45.257 回答
0

在尝试了很多解决方案之后,对我来说没有任何效果。最后我知道了最基本的事情,即确保你定义了swagger配置文件的文件和你的主要方法文件 应该在同一个包中。

@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
    .select()
    .apis(RequestHandlerSelectors.any())
    .paths(PathSelectors.any())
    .paths(Predicates.not(PathSelectors.regex("/error.*")))
    .build();
}

请检查此图像

于 2019-02-15T03:56:14.960 回答