Spring Boot 2.6.4
Java 11
Swagger설정하기 위한 라이브러리는 2가지가 있다.
Spring-Fox
, Spring-Doc
2가지 중에 사용하면 된다.
https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui
https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
초기에는 Spring-fox를 이용하여 설정하였는데, 설정하는 방법이 WebMVC Configuration을 직접 건드리는 것이여서 추후에 문제가 생길것도 하여 Spring-doc으로 다시 되돌아왔다.
Spring-fox는 업데이트가 더 이상 이루어지지 않아 쓰이지 않는 분위기이다. 그래서 Spring-doc을 설정하는 방법에 대해 설명하고자 한다.
implementation 'org.springdoc:springdoc-openapi-ui:1.6.6'
제일 최근 버전을 사용했다. 위에 적어둔 홈페이지로 가서 원하는 버전으로 설정하면 된다.
Swagger2Config.java
@Configuration
public class Swagger2Config {
@Bean
public GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("v1-definition")
.pathsToMatch("/api/**")
.build();
}
@Bean
public OpenAPI springShopOpenAPI() {
return new OpenAPI()
.info(new Info().title("Bstagram API")
.description("BMW 프로젝트 API 명세서입니다.")
.version("v0.0.1");
}
}
group
pathsToMatch
OpenAPI
더 많은 설정은 https://springdoc.org/#properties 여기서 확인 가능하다.
@Tag(name = "posts", description = "게시물 API")
@RestController
@RequestMapping("/api/posts")
@RequiredArgsConstructor
public class PostsController {
@Operation(summary = "get posts", description = "지역에 대한 posts들 가져오기")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PostsResponseDto.class))),
@ApiResponse(responseCode = "400", description = "BAD REQUEST"),
@ApiResponse(responseCode = "404", description = "NOT FOUND"),
@ApiResponse(responseCode = "500", description = "INTERNAL SERVER ERROR")
})
@Parameters({
@Parameter(name = "province", description = "시", example = "경기도"),
@Parameter(name = "city", description = "도", example = "고양시"),
@Parameter(name = "hashtag", description = "검색한 해시태그", example = "['#자장면', '#중국집']")
})
@ResponseBody
@GetMapping( "")
public PostsResponseDto getPosts(
@RequestParam(value = "province") String province,
@RequestParam(value = "city") String city,
@RequestParam(value = "hashtag", required = false) @Nullable String hashtag
) {
return new PostsResponseDto(1);
}
}
@Tag
@Operation
@ApiResponses, @ApiResponse
@Parameters, @Parameter
return 값으로 객체를 내보낸다면 다음과 같이 뜬다.
참고
https://oingdaddy.tistory.com/272
https://blog.jiniworld.me/91
https://springdoc.org/
swagger에 대한 막연한 두려움이 있었는데 덕분에 조금씩 이겨나가고 있습니다! 감사합니다 👍