스프링

[스프링] @RestControllerAdvice 이용한 예외처리 방법

imcoding 2022. 10. 14. 14:37

 

 

@RestControllerAdvice


 

스프링에서 예외처리를 하는 대표적인 방법으로 @ExceptionHandler 어노테이션이 있다.

 

하지만 이 어노테이션은 각각의 메서드에 따로 적용되기 때문에, 필요한 메서드마다 일일이 달아줘야 하는 번거로움이 있다.

 

우리는 RestControllerAdvice 어노테이션을 이용해 그 불편함을 줄일 수 있다.

 

바로 코드로 설명하겠다.

 

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) // 500 error
    @ExceptionHandler(Exception.class) //
    public Exception handlerAllException() {
        System.out.println("error from GlobalExceptionHandler");
        return new Exception();
    }

예외처리를 담당할 클래스를 하나 만들어주고, RestControllerAdvice 어노테이션을 선언한다.

 

이 어노테이션은 프로젝트 내에 모든 클래스에서 발생하는 예외들을 모아주는 역할을 담당한다.

 

그리고 각 예외들마다 ExceptionHandler 어노테이션을 붙인 메서드가 처리하도록 하면 된다.

 

위 코드의 경우에는, 일단 예외가 발생하면 GlobalExceptionHandler 클래스로 보내지고 handlerAllException 메서드에 의해 처리될 것이다.

 

추가로, 이름에서 보듯이 Rest가 빠진 ControllerAdvice 어노테이션도 있다.

 

둘의 차이는 응답 형태가 Json이냐 아니냐로 구분되니 참고하자.

 

 

각 클래스의 메서드마다 예외처리를 개별적으로 지정해야 하는 번거로움을 줄여줄 수 있는 @RestControllerAdvice 어노테이션에 대해 알아보았다.