51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

在 Swagger 文档中移除 BasicErrorController

1、概览 {#1概览}

本文将带你了解如何 Swagger 文档界面中隐藏 BasicErrorController

3、问题 {#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 包含在生成的文档中:

swagger 文档界面

4、解决办法 {#4解决办法}

有四种方式可以从 Swagger 文档中排除资源。

4.1、通过 basePackage() 方法排除 {#41通过-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、通过指定注解排除 {#42通过指定注解排除}

可以通过配置让 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、使用正则通过路径排除 {#43使用正则通过路径排除}

另一种方法是在自定义路径上指定一个正则表达式。

如下,只有映射到 /good-path 前缀的资源才会被记录到文档:

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

4.4、通过 @ApiIgnore 注解排除 {#44通过-apiignore-注解排除}

最后,更简单的方式是使用 @ApiIgnore 注解从 Swagger 中排除特定类:

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

5、总结 {#5总结}

本文介绍了在 Spring Boot 应用中配置 Swagger 以隐藏 BasicErrorController 文档的四种不同方法。


参考:https://www.baeldung.com/spring-swagger-remove-error-controller

赞(7)
未经允许不得转载:工具盒子 » 在 Swagger 文档中移除 BasicErrorController