Swagger ui를 붙일 때 발생하는 Failed to start bean 'documentationPluginsBootstrapper';

yeonicerely·2022년 11월 24일
0

안녕오류

목록 보기
4/8

Swagger ui를 붙여서 작성한 API를 시각화하려고 할 때 아래와 같은 에러가 계속 발생했다.

Failed to start bean 'documentationPluginsBootstrapper';
Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.toString()" because the return value of "springfox.documentation.spi.service.contexts.Orderings.patternsCondition(springfox.documentation.RequestHandler)" is null

(1) 우선 StackOverFlow에서 @EnableSwagger2 어노테이션을 제거하라는 글을 보고 그대로 진행했다: 그렇게 하면 swagger를 사용한다는 표시를 제거한 것이기 때문에 코드를 실행시키는데에는 문제가 뜨지만 url:port번호/swagger-ui.html으로 접속했을 때 아래와 가 같은 에러가 뜬다

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2 // --> annotation을 제거했었음
public class SwaggerConfig {
    @Bean
    public Docket swagger() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.likelion.springjpaexcercise.controller"))
                .paths(PathSelectors.any())
                .build();
    }
}

(2) application.yml에 matching-strategy를 설정해준다.
아래와 같은 코드를 넣어서 설정을 변경해주면 정상적으로 실행이 된다!

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

그 이유는 spring boot 2.6 버전부터 spring.mvc.pathmatch.matching-strategy의 기본값이 AntPathMatcher에서 PathPatternParser로 바뀌었기 때문에 발생한다고 한다. PathPatternParser에서는 spring.mvc.servlet.path가 지원되지 않기 때문이다.

대표적으로 Spring Security를 사용할 때 프로그램 시작 시 에러가 발생한다.

The default strategy for matching request paths against registered Spring MVC handler mappings has changed from AntPathMatcher to PathPatternParser.
A custom dispatcher servlet path (spring.mvc.servlet.path) is not supported when using PathPatternParser.

또한 Actuator나 Springfox를 이용하는 경우에도 작성한 프로그램이 시작되지 않다고 한다. annotation이나 web.xml을 이용해서 url을 입력했을 때 서블렛(servelet)이 그 url에 해당하는 자바파일을 실행되게 하는데(URL matching), 이를 위해서는 spring.mvc.servlet.path가 지원되어야 하기 때문이다.

cf. 이 프로젝트에서는 @PathVariable 을 통해 URL matching이 이루어졌다.

The actuator endpoints now also use PathPattern based URL matching. Note that the path matching strategy for actuator endpoints is not configurable via a configuration property. If you are using Actuator and Springfox, this may result in your application failing to start.


참고 자료

0개의 댓글