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에서 사용할 수 있습니다 .