1. 개요
- 라이브러리가 OpenAPI 3.0 스펙에 맞는 JSON을 자동으로 만들어 주면, Swagger UI는 만들어진 JSON을 바탕으로 화면에 표시 해줍니다.
- Spring Boot 2.0.9.RELEASE로 테스트 하였습니다.
2. 문제 해결
- messageconverter가 설정되어 있어서 Swagger UI가 /v3/api-docs/ end-point로 접근시 String으로 감싼 JSON 형으로 리턴됨.
- HttpServletRequest 객체의 getRequestURI 메소드를 사용하여 요청한 Uri를 가져옴.
- Uri가 /v3/api-docs/ 또는 /v3/api-docs/swagger-config 인지 확인하여 원본 내용을 리턴하게 예외처리. (e.g. json이면 json으로)
3. build.gradle 파일에 dependency 추가
dependencies {
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.2.30'
}
4. 설정 파일에 관련 설정 추가
springdoc:
api-docs:
groups:
enabled: true
swagger-ui:
path: /swagger-ui.html
displayRequestDuration: true
groups-order: DESC
5. OpenApiConfig.java 파일 작성
package kr.webgori.lolien.discord.bot.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Contact;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.info.License;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@OpenAPIDefinition(
info = @Info(title = "lolien-discord-bot API 명세서",
description = "API 명세서",
version = "v1",
contact = @Contact(name = "webgori", email = "webgori@gmail.com"),
license = @License(name = "Apache 2.0",
url = "http://www.apache.org/licenses/LICENSE-2.0.html")
)
)
@Configuration
public class OpenApiConfig {
/**
* customGameOpenApi.
* @return GroupedOpenApi
*/
@Bean
public GroupedOpenApi customGameOpenApi() {
String[] paths = {"/custom-game/**"};
return GroupedOpenApi.builder().setGroup("내전 관련 API").pathsToMatch(paths)
.build();
}
/**
* leagueOpenApi.
* @return GroupedOpenApi
*/
@Bean
public GroupedOpenApi leagueOpenApi() {
String[] paths = {"/league/**"};
return GroupedOpenApi.builder().setGroup("리그 관련 API").pathsToMatch(paths)
.build();
}
}
6. Swagger UI 확인
http://IP 또는 도메인:포트/swagger-ui.html 으로 접속 후 확인