본문 바로가기
Spring

스프링에서 Exception 핸들러 매핑하기

by jayden-lee 2019. 7. 25.
728x90

@ExceptionHandler

WelcomeController 클래스에 있는 두 메서드는 모두 @ExceptionHandler 어노테이션을 붙였습니다. 첫 번째 handle 메서드는 CustomException 예외 처리 전용 메서드이며, 두 번째 handleDefault 메서드는 일반 예외 처리 메서드 역할을 합니다. 두 메서드 모두 에러 상황에 따라 맞는 렌더링 할 뷰 이름을 반환하고 있습니다.

 

@ExceptionHandler는 특정 컨트롤러 안에서 예외가 발생한 경우에만 예외를 매핑하는 문제점이 있습니다.

@Controller
public class WelcomeController {

    @ExceptionHandler(CustomException.class)
    public String handle(CustomException e) {
        return "customException";
    }

    @ExceptionHandler()
    public String handleDefault(Exception e) {
        return "error";
    }

}

@ControllerAdvice

@ControllerAdvice 어노테이션은 범용적인 예외 처리를 하는 클래스에 추가합니다. 클래스 레벨에 @ControllerAdvice 어노테이션을 추가하고, 각 예외 상황에 맞게 처리해야 하는 메서드에는 @ExceptionHandler 어노테이션을 추가합니다.

@ControllerAdvice
public class ExceptionHandlingAdvice {

    @ExceptionHandler(CustomException.class)
    public String handle(CustomException e) {
        return "customException";
    }

    @ExceptionHandler()
    public String handleDefault(Exception e) {
        return "error";
    }

}

댓글