[Spring Error] Spring Boot 3.x에서 Swagger 설정 시 404 Error
Swagger 설정 관련 포스트
[Spring] Spring Boot 3.x에서 Swagger 설정하기
시작하기 Spring Boot 3.x로 프로젝트를 진행하며 Swagger의 필요성을 느꼈다. Swagger 설정이 간단했던 것으로 알고있어서 금방 끝날거라고 생각했지만 생각보다 고난을 겪었다. 관련 내용을 포스팅한
miraekwak.tistory.com
Swagger 404
위와 같이 설정을 했음에도 나의 경우 계속 404 에러를 보았었다. spring boot에서 에러가 나는 것도 아니고 404에러였기에 뭐가 문제인지 알기가 너무나 어려웠다... 그래서! 어떻게 해결했는지 적어보려고 한다.
ArgumentResolver 문제
JWT token을 통해 사용자 인증을 하면서 token인증을 위한 HandlerMethodArgumentResolver를 구현하여 ArgumentResolver에 등록했다. 이때 나는 WebConfig 클래스에서 WebConfigurationSupport를 상속받아 addArgumentResolvers를 통해 등록했는데 이 방식이 문제였다. 코드는 아래↓
@Configuration
@RequiredArgsConstructor
public class WebConfig extends WebMvcConfigurationSupport {
private final AuthMemberArgumentResolver authMemberArgumentResolver;
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(authMemberArgumentResolver);
}
}
왜 문제지?
springdoc-openapi-webmvc 의 경우 SwaggerWebMvcConfigurer 클래스가 존재하는데 이 클래스의 겨우 WebMvcConfiguerer을 인터페이스로 구현되고 있다.
스프링 MVC의 자동구성은 WebMvcAutoConfiguration이 담당하는데 @ConditionalOnMissingBean 애노테이션은 WebMvcConfigurationSupport가 없을때 활성화 된다고 한다. 활성화 될때 WebMvcConfigurer.class 를 바탕으로 구성된다.
springdoc-openapi-webmvc 의 경우 WebMvcConfiguerer를 바탕으로 구성되는데, 내 코드에서는 ArgumentResolver를 WebMvcConfigurationSupport를 바탕으로 구현하다보니 WebMvcConfigure 클래스 바탕으로 Mvc가 구성되지 않아 문제였던 것 같다. (나의 생각...)
해결
WebMvcConfigurationSupport를 WebMvcConfigure 변경하여 구현한다!
@Configuration
@RequiredArgsConstructor
public class WebConfig implements WebMvcConfigurer {
private final AuthMemberArgumentResolver authMemberArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(authMemberArgumentResolver);
}
}