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
被包含在生成的文档中:
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上找到。