1. 概述

在这个教程中,我们将学习如何在Spring Boot应用中配置多个方法来隐藏由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被包含在生成的文档中:

swagger

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("com.baeldung.swaggerconf.controller"))
        .build();
   }
}

有了这个自定义配置,Swagger将只检查指定包内的REST 控制器方法。例如,如果BasicErrorController定义在"com.baeldung.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. 总结

在这篇文章中,我们介绍了四种配置Swagger的方法,以在Spring Boot应用中隐藏BasicErrorController资源。

如往常一样,完整的代码可在GitHub上找到。