-
[Spring Error] Spring Boot 3.x에서 Swagger 설정 시 404 ErrorBackend/Spring 2023. 5. 27. 15:28728x90
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); } }
728x90'Backend > Spring' 카테고리의 다른 글
[Spring] Spring Boot 3.0.6 JPA에서 MySQL 연결하기 (0) 2023.05.30 [Spring] springdoc swagger에서 LocalTime 변수를 string으로 받기 (feat. @Schema) (0) 2023.05.29 [Spring] Swagger에서 JWT관련 설정하기 (Authorization, ArgumentResolver) (0) 2023.05.27 [Spring] Spring Boot 3.x에서 Swagger 설정하기 (0) 2023.05.27 [Spring] JPARepository에서 Entity join 방법 및 대상 Entity가 아닌 다른 Entity를 반환해야 할 때 (0) 2022.10.06