1. 개요

이 예제에서는 Spring Boot 애플리케이션에서 BasicErrorController 에 의해 노출된 경로를 숨기도록 Swagger를 구성 하는 여러 방법 배웁니다 .

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을 제공하면 충분합니다 .

@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 애플리케이션에서 BasicErrorController 리소스를 숨기도록 Swagger를 구성하는 네 가지 방법을 제시했습니다.

항상 그렇듯이 전체 코드는 GitHub에서 사용할 수 있습니다 .

Generic footer banner