删除 SpringFox SwaggerUI 中的基本错误控制器

Remove Basic Error Controller In SpringFox SwaggerUI

有没有办法从 springfox swagger-ui 中删除 "basic-error-controller"?

图片:

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

    return new Docket( DocumentationType.SWAGGER_2)
        .select()
        .apis( RequestHandlerSelectors.basePackage( "your package" ) )
        ...

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

@ApiIgnore
public class ErrorController {

这将从文档中排除 class。

  • 可以使用 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();
     }
    

我认为,最优雅的解决方案是仅将 @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 合格的控制器。

在尝试了很多解决方案之后,没有一个对我有用。最后,我了解了最基本的事情,即确保您在其中定义 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();
}

Please check this image

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

package com.app.microservice;

然后使用下面的代码,它将只显示包中的控制器和 disable/exclude 其他

@Configuration
@EnableSwagger2
public class SwaggerConfig {

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

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

@Bean
public Docket swagger() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage(this.getClass().getPackageName()))
            .paths(PathSelectors.any())
            .build()
            .useDefaultResponseMessages(false);
}

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