해결 전 진행사항
간단한 프로젝트를 진행하고 있는데, swagger-ui를 이용하는데 에러가 발생했다.
분명 dependencies도
dependencies{
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
}
으로 주었고,
config 패키지에 SwaggerConfig 클래스를 만들어
@Configuration
public class SwaggerConfig{
@Bean
public Docket api(){
return new Docket(DocumentationType.OAS_30)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("org.zerock.b01.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("Boot 01 Project Swagger")
.build();
}
}
이렇게 필요한 것을 작성해주었다.
또한,
Spring Web관련 설정을 추가해주기 위해
Config폴더에 CustomServletConfig 클래스를 만들어 작성해주었다.
Swagger UI가 적용되면서 정적 파일의 경로가 달라지기 때문에 CustomServletConfig로 WebMvcConfigurer 인터페이스를 구현하고 addResourceHandlers를 재정의한다.
package org.zerock.b01.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig{
@Bean
public Docket api(){
return new Docket(DocumentationType.OAS_30)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("org.zerock.b01.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("Boot 01 Project Swagger")
}
}
이렇게 까지 해주었는데...오류가 뜬다...왜 일까...
오류 해결
따라서 2가지를 해줘야 한다.
기존의
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
을
mplementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
이렇게 수정해준다.
일부 부분이 아니라 거의 대대적인 수정이 필요하다.
package org.zerock.b01.config;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.info.Info;
import lombok.RequiredArgsConstructor;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@OpenAPIDefinition(
info = @Info(title = "Zerock App", version = "v1"))
@RequiredArgsConstructor
@Configuration
public class SwaggerConfig {
@Bean
public GroupedOpenApi chatOpenApi(){
String[] paths = {"/**"};
return GroupedOpenApi.builder()
.group("Zerock OPEN API v1")
.pathsToMatch(paths)
.build()
}
}
이렇게 수정해주니 드디어 Swagger-ui가 뜬다!!!ㅎㅎㅎ
오늘도 한 단계 성장에 감사한 하루!