在 Swagger 文档中移除 BasicErrorController
1、概览
本文将带你了解如何 Swagger 文档界面中隐藏 BasicErrorController
。
3、问题
如果应用中包含了一个 BasicErrorController
,Swagger 默认会将其所有端点也包含在生成的文档中。
我们需要提供自定义配置来移除不需要的 Controller。
例如,项目中的 Rest Controller 如下:
@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";
}
}
另外,还包含一个继承 BasicErrorController
的 Error Controller:
@Component
@RequestMapping("my-error-controller")
public class MyErrorController extends BasicErrorController {
// basic constructor
}
启动应用,访问文档!你可以看到,my-error-controller
包含在生成的文档中:
4、解决办法
有四种方式可以从 Swagger 文档中排除资源。
4.1、通过 basePackage()
方法排除
通过指定 Controller 所在的包,可以排除其他不需要的资源。
只有当 Error Controller 和 Rest Controller 在不同包时,这种方法才有效。在 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")) // Rest Controller 所在的包
.build();
}
}
如上,Swagger 将只扫描指定包内的 REST Controller。假如 BasicErrorController
定义在 com.baeldung.swaggerconf.error
包中,那么它会被忽略。
4.2、通过指定注解排除
可以通过配置让 Swagger 只扫描带有指定注解的 Rest Controller。
例如,只扫描有 @RestController
注解的 Controller:
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.build();
}
由于 BasicErrorController
没有使用 @RestController
,所以它会被忽略。但是其他要生成文档的 Controller 要记得添加此注解。
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 {
}
5、总结
本文介绍了在 Spring Boot 应用中配置 Swagger 以隐藏 BasicErrorController
文档的四种不同方法。
参考:https://www.baeldung.com/spring-swagger-remove-error-controller