[Spring] Spring 버전에 따른 Swagger 적용 방식
기존의 Spring 2.x.x 버전에서 사용하던 Swagger 적용 방법
기존의 방식은 springfox를 이용하여 적용하는 방식이였음.
build.gradle
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
SwaggerConfig
@Configuration
public class SwaggerConfig {
TypeResolver typeResolver = new TypeResolver();
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.alternateTypeRules(AlternateTypeRules.newRule(typeResolver.resolve(Pageable.class), typeResolver.resolve(Page.class)))
.useDefaultResponseMessages(true) // Swagger 에서 제공해주는 기본 응답 코드 (200, 401, 403, 404) 등의 노출 여부
.apiInfo(apiInfo()) // Swagger UI 로 노출할 정보
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.waffleeungaebackend")) // api 스펙이 작성되어 있는 패키지 (controller)
.paths(PathSelectors.any()) // apis 에 위치하는 API 중 특정 path 를 선택
.build();
}
public ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Eungae")
.description("eungae swagger.")
.version("0.2")
.build();
}
@Getter
@Setter
@ApiModel
static class Page {
@ApiModelProperty(value = "페이지 번호(0..N)")
private Integer page;
@ApiModelProperty(value = "페이지 크기", allowableValues="range[0, 100]")
private Integer size;
@ApiModelProperty(value = "정렬(사용법: 컬럼명,ASC|DESC)")
private List<String> sort;
}
}
Spring 3.x.x 버전부터 바뀐 Swagger 적용 방식
3버전부터는 Springdocs를 사용하여 적용되어야 한다.
이걸 모르고 죽어라 검색하고 뭐 접속도 안되네 뭐가 문제지 하고 SecurityConfig에 permit 부분만 죽어라 바꾸고 그래들만 죽어라 바꿔봤는데 일주일 후에 알게됨…
build.gradle
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'
SwaggerConfig
@RequiredArgsConstructor
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI JmtApi() {
Info info = new Info()
.title("JMT 프로젝트 API") // 타이틀
.version("v1") // 문서 버전
.description("잘못된 부분이나 오류 발생 시 바로 말씀해주세요.") // 문서 설명
.contact(new Contact() // 연락처
.name("GDSC DJU")
.email("anes53027@gmail.com"));
// Security 스키마 설정
SecurityScheme bearerAuth = new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")
.in(SecurityScheme.In.HEADER)
.name(HttpHeaders.AUTHORIZATION);
// Security 요청 설정
SecurityRequirement addSecurityItem = new SecurityRequirement();
addSecurityItem.addList("JWT");
return new OpenAPI()
// Security 인증 컴포넌트 설정
.components(new Components().addSecuritySchemes("JWT", bearerAuth))
// API 마다 Security 인증 컴포넌트 설정
.addSecurityItem(addSecurityItem)
.info(info);
}
}
application.properties
springdoc.packages-to-scan=com.gdsc.projectmiobackend.controller
springdoc.default-consumes-media-type=application/json;charset=UTF-8
springdoc.default-produces-media-type=application/json;charset=UTF-8
springdoc.api-docs.groups.enabled=true
springdoc.cache.disabled=true
springdoc.api-docs.path=/api-docs
Leave a comment