[Error해결기록] Swagger-ui 관련

휘Bin·2023년 5월 5일
0
post-thumbnail

해결 전 진행사항

간단한 프로젝트를 진행하고 있는데, 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에서, 스프링 부트의 버전은 3버전이 되면서 Swagger UI가 정상적으로 동작하지 않는 문제가 발생한 것이다

따라서 2가지를 해줘야 한다.

  • 첫 번째,
    [build.gradle 수정]

기존의

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'

이렇게 수정해준다.

  • 두 번째,
    [SwaggerConfig 클래스 수정]

일부 부분이 아니라 거의 대대적인 수정이 필요하다.

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가 뜬다!!!ㅎㅎㅎ

오늘도 한 단계 성장에 감사한 하루!

profile
One-step, one-step, steadily growing developer

0개의 댓글