[Spring] Springfox-Swagger 3.0.0 적용시 에러 해결

최동근·2023년 6월 14일
0

안녕하세요 오늘은 MSA_structure 프로젝트 를 통해 MSA 구조에 대해 공부하던 중 마주쳤던 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang .NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition .PatternsRequestCondition.getPatterns()" because "this.condition" is null 에러에 대해 원인과 해결법을 알아보겠습니다.

🧑‍🔧 관련 코드

// build.gradle
plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.9' apply(false)
    id 'io.spring.dependency-management' version '1.1.0' apply(false)
}

allprojects {
    apply plugin: 'java'
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'

    repositories {
        mavenCentral()
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}


subprojects {
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'


    configurations {
    }

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        testImplementation 'org.assertj:assertj-core:3.24.2'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        runtimeOnly 'com.h2database:h2'

		// swagger 의존성
        implementation 'io.springfox:springfox-swagger2:3.0.0'
        implementation 'io.springfox:springfox-swagger-ui:3.0.0'

        implementation 'org.springframework.boot:spring-boot-starter-validation'
    }

}

tasks.named('test') {
    useJUnitPlatform()
}

코드를 보면 알겠지만 spring boot 2.7.9 를 사용했으며 Java 는 11 을 사용했습니다.
또한, 프로젝트를 진행하면서 Swagger 를 사용하기 위해 가장 최신 버전인 swagger 3.0.0 의존성이 추가된 것을 알 수 있습니다 👾

이후, application을 구동했는데....

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang
.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition
.PatternsRequestCondition.getPatterns()" because "this.condition" is null

처음 보는 오류 메세지가 떴습니다 😱 ....

🧑‍🔧 오류 원인과 해결 방법

다행이 해당 오류는 비교적 해결하기 쉬운 오류였습니다 ❗️
오류 원인은 Swagger2 기능을 제공하는 SpringFox 에서 업데이트를 진행하지 않아 SpringBoot 2.6.0 이상 버전에 대해서는 위와 같은 에러가 발생하는 것입니다.

해결방법으로는 2가지가 있습니다 🔥

1. Spring boot 버전을 2.5.x 이하로 낮춘다.

해당 방법은 build.gradle 을 수정하면 되기 때문에 어렵지 않습니다.
하지만 저는 2번째 방법을 추천합니다. 왜냐하면 버전을 다운그레이드 함으로써 다른 곳에서 예상치 못한 오류가 발생할 수 있기 때문입니다.

2. application.yml에
mvc.pathmatch:matching-strategy: ant_path_matcher 추가

spring boot 2.6.0부터 요청 경로를 ControllerHandler에 매칭시키기 위한 전략의 기본값이 ant_path_matcher 전략 -> path_pattern_parser 전략으로 변경되었기 때문에 해당 설정을 해주면 정상적으로 application 이 동작하며 swagger 를 사용할 수 있습니다.

spring 을 이용해 서비스를 설계하면서 버전 문제 때문에 발생하는 오류가 빈번한 것 같습니다.
하지만 중요한 것은 오류가 발생했을때 당황하지 말고 침착하게 구글링 해보는 습관...중요한것 같습니다 👩‍🔬


참고

[SpringBoot] Failed to start bean documentationPluginsBootstrappe

profile
비즈니스가치를추구하는개발자

0개의 댓글