1. 概要

このチュートリアルでは、 SpringBootアプリケーションでSwaggerを構成して、BasicErrorControllerによって公開されるパスを非表示にする複数の方法を学習します。

2. 対象プロジェクト

この記事では、SpringBootとSwagger-UIで開始するための基本構成の作成については説明しません。 構成済みのプロジェクトを使用するか、 Spring RESTAPIガイドを使用したSwagger2のセットアップに従って基本構成を作成できます。

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つの異なるソリューションについて説明します。

4.1. basePackage()で除外します

文書化するコントローラーの基本パッケージを指定することで、不要なリソースを除外できます。

これは、エラーコントローラパッケージが標準コントローラのパッケージと異なる場合にのみ機能します。 Spring Bootでは、 Docketbeanを提供すれば十分です。

@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 は、 @RestController アノテーションで装飾されていないため、Swaggerドキュメントから除外されます。 この注釈は、代わりに、文書化する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リソースを非表示にする4つの異なる方法を紹介しました。

いつものように、完全なコードはGitHubから入手できます。