티스토리 뷰
728x90
스웨거2를 이용하여 문서화를 진행하던 도중 API별로 깔끔하게 모아서 정리하고 싶었으나
아래와 같이 @Api 어노테이션의 description이 deprecated되어 사용할 수 없는 문제가 발생했다.
@Api(tags = "tag", description = "태그") //deprecated
public class MyApiController {
해당 문제에 대해 찾아보니 이미 2015년 부터 해당 issue가 있었고 2019년도까지는 deprecated된 속성을 계속 써왔던걸로 보인다.
원인
해당 문제에 대한 원인은 Swagger 1.X 버전에서는 @Api의 description 속성을 통해 그룹화했었지만
Swagger 2.X 버전에서 tags라는 속성을 통해 그룹화를 하게 되며 해당 어노테이션간의 충돌을 막고자 한 것으로 보인다.
해결 방법
간단하게 스웨거3로 버전을 올리는 방법이 있다.
하지만 본인은 스웨거3로 시작했다가 이런 저런 버그를 맛보고 2.X 버전으로 내려온터라 다른 방법을 찾아야 했고 해결 방법은 다음과 같다.
Swagger 설정 파일에 다음과 같이 tags를 설정한다.
필요한만큼 쭉 늘려나가면 된다.
@Bean
public Docket swaggerApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(this.swaggerInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.ant("/api/**"))
.build()
.tags( new Tag("a", "description"),
new Tag("b","description"),
);
}
그 이후에 아래처럼 해당 tag를 가져다가 쓰는 방식으로 사용하면 된다.
@Api(tags = "a")
public class MyApiController {
그 외
다른 2가지 방식이 더 있길래 둘 다 시도해봤으나 제대로 동작하지 않았다.
@Api와 @Tag를 같이 사용하는 방법
동작하지 않음
@Api(tags = "Controller API")
@Tag(name = "Controller API", description = "This controller performs API operations")
public class ReportStatusConsumerController {
}
@SwaggerDefinition
원하는 방식으로 동작하지 않음
@SwaggerDefinition(
info = @Info(
description = "Gets the weather",
version = "V12.0.12",
title = "The Weather API",
termsOfService = "http://theweatherapi.io/terms.html",
contact = @Contact(
name = "Rain Moore",
email = "rain.moore@theweatherapi.io",
url = "http://theweatherapi.io"
),
license = @License(
name = "Apache 2.0",
url = "http://www.apache.org/licenses/LICENSE-2.0"
)
),
consumes = {"application/json", "application/xml"},
produces = {"application/json", "application/xml"},
schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS},
tags = {
@Tag(name = "Private", description = "Tag used to denote operations as private")
},
externalDocs = @ExternalDocs(value = "Meteorology", url = "http://theweatherapi.io/meteorology.html")
)
public interface TheWeatherApiConfig {
}
레퍼런스
https://github.com/swagger-api/swagger-core/issues/1476
'트러블슈팅' 카테고리의 다른 글
스프링부트에서 @Value는 @RequiredArgsConstructor에 의해 주입받지 못 한다. (0) | 2022.12.15 |
---|---|
스프링부트 Gradle 멀티모듈 프로젝트에서 dependency를 보지 못 하는 경우 해결 방법 (0) | 2022.10.31 |
스프링부트와 프로메테우스 연동시 "INVALID" is not a valid start token가 발생할 경우 해결 방법 (0) | 2022.07.25 |
Spring actuator 의존성 추가만으로 nullpointerexception가 발생할때 해결방법 (2) | 2022.07.25 |
@AllArgsConstructor는 @Value와 같이 동작하지 않는다. (0) | 2022.07.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ModelAttribute
- Dap
- 도커
- neovim
- RequestParam
- 아키텍처
- JavaScript
- 배포
- 레디스
- 루나빔
- RequestPart
- RequestBody
- IDE
- lunarvim
- vim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함