본문 바로가기
개발/SpringBoot

SpringBoot @RestControllerAdvice not working

by 궁즉변 변즉통 통즉구 2022. 5. 6.
반응형

RestController 전역 예외처리를 위하여 @RestControllerAdvice를 적용하였다. 예외 타입 별로 리턴 메시지처리 등이 효율적으로 될 것 같아서 적용했는데 동작을 하지 않았다.

 

코드는 간단히 테스트용으로 아래와 같이 적용했다.

@Slf4j
@RestControllerAdvice
public class MyControllerAdvice {

	@ExceptionHandler(MyException.class)
 	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
	public String myExceptionHandler(Exception e) {
		return "myexception";
	}

	@ExceptionHandler(NoHandlerFoundException.class)
 	@ResponseStatus(HttpStatus.NOT_FOUND)
	public String NotFoundHandler(Exception e) {
		return "404";
	}
    
    ...
}

일단 package scan에서 제외되는지 basePackages 설정도 확인하고 기타 다른 설정들도 확인했는데 별다른 문제점은 찾지 못했다. 그러다가 spring 라이브러리 의존성을 확인하게 되었는데 그 부분에서 문제가 있었다. 

 

현재  spring-boot-starter 버전을 2.5.5로 설정해놨는데 어떤 이유인지 모르겠지만 spring-webmvc 의존성이 별도로 선언되어 있었고 버전은 5.3.18로 되어 있었다. 

implementation 'org.springframework.boot:spring-boot-starter-web:2.5.5'
...
implementation 'org.springframework:spring-webmvc:5.3.18'
...

결론적으로는 별도 선언된 spring-webmvc를 제거하니 @RestControllerAdvice가 잘 적용되었다. 

위와 같이 spring boot 2.5.5로 선언한 경우 기본적으로 spring은 5.3.10을 사용하게 되어 있는데, spring-webmvc만 5.3.18이 적용되어 spring 내부적으로 처리할 때 클래스를 못찾거나 뭔가 꼬여서 문제가 발생한 것 같다. 

 

위와 같이 의존성을 설정할 일은 없겠지만 혹시나 이것저것 다 찾아봤는데 뭔가 동작이 안된다면 라이브러리 의존성도 한번 체크해볼 필요가 있다.

 

반응형

댓글