개발/SpringBoot
SpringBoot @RestControllerAdvice not working
궁즉변 변즉통 통즉구
2022. 5. 6. 13:14
반응형
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 내부적으로 처리할 때 클래스를 못찾거나 뭔가 꼬여서 문제가 발생한 것 같다.
위와 같이 의존성을 설정할 일은 없겠지만 혹시나 이것저것 다 찾아봤는데 뭔가 동작이 안된다면 라이브러리 의존성도 한번 체크해볼 필요가 있다.
반응형