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

2023/05/12

1. 概述

在本教程中,我们将学习在Spring Boot应用程序中配置Swagger以隐藏BasicErrorController公开的路径的多种方法。

2. 目标项目

在本文中,我们不会介绍从Spring Boot和Swagger-UI开始创建基本配置。我们可以使用已经配置的项目,也可以按照使用Spring REST API指南设置Swagger 2来创建基本配置。

3. 问题

如果我们的代码包含BasicErrorController,则Swagger默认情况下也会在生成的文档中包含它的所有端点,我们需要提供自定义配置来删除不需要的控制器。

例如,假设我们想提供一个标准RestController的API文档:

@RestController
@RequestMapping("good-path")
public class RegularRestController {

    @ApiOperation(value = "This method is used to get the author name.")
    @GetMapping("/getAuthor")
    public String getAuthor() {
        return "Name Surname";
    }

    // Other similar methods
}

另外,假设我们的代码包含一个扩展BasicErrorController的类:

@Component
@RequestMapping("my-error-controller")
public class MyErrorController extends BasicErrorController {
    // basic constructor
}

我们可以看到生成的文档中包含了my-error-controller:

4. 解决方案

在本节中,我们将介绍四种不同的解决方案,以从Swagger文档中排除资源。

4.1 使用basePackage()排除

通过指定我们要记录的控制器的基础包,我们可以排除不需要的资源

这仅在错误控制器包与标准控制器包不同时,此操作才有效。使用Spring Boot,只要我们提供一个Docket bean就足够了:

@Configuration
public class SwaggerConfiguration {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
              .select()
              .apis(RequestHandlerSelectors.basePackage("cn.tuyucheng.taketoday.swaggerconf.controller"))
              .build();
    }
}

有了这个自定义配置,Swagger将仅在指定包内检查REST控制器方法。因此,例如,如果我们的BasicErrorController是在包“cn.tuyucheng.taketoday.swaggerconf.error”中定义的,则不会考虑它。

4.2 排除注解

或者,我们也可以指示Swagger必须只生成标注有特定Java注解的类的文档

在本例中,我们将其设置为RestController.class:

@Bean
public Docket api() {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
       .select()
       .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
       .build();
}

在这种情况下,BasicErrorController将被排除在Swagger文档之外,因为它没有使用@RestController注解进行修饰,这个注解只出现在我们想要记录的RegularRestController上。

4.3 在路径上使用正则表达式排除

另一种方法是在自定义路径上指定正则表达式,在这种情况下,只会记录映射到“/good-path”前缀的资源:

@Bean
public Docket api() {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
       .select()
       .paths(regex("/good-path/.*"))
       .build();
}

4.4 使用@ApiIgnore排除

最后,我们可以使用@ApiIgnore注解从Swagger中排除一个特定的类

@Component
@RequestMapping("my-error-controller")
@ApiIgnore
public class MyErrorController extends BasicErrorController {
    // basic constructor
}

5. 总结

在本文中,我们介绍了四种不同的方法来在Spring Boot应用程序中配置Swagger以隐藏BasicErrorController资源。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章