@RestControllerAdvice

MINI·2023년 2월 9일
0

spring

목록 보기
1/3

SPRING에서 예외처리

자바에서 예외처리는 try-catch로 처리한다. 하지만 매번 로직마다 try-catch로 예외처리를 하는건 매우 비효율적이고 유지보수가 어려워진다.

이를 해결하기 위해 spring에서는 @ExceptionHandler@ControllerAdvice라는 기능을 제공한다.

@ExceptionHandler@ControllerAdvice를 사용하면 예외처리라는 기능을 메인 로직에서 분리해서 관리할수 있다.


@ExceptionHandler

@ExceptionHandler는 컨트롤러 어노테이션을 적용한 클래스의 예외처리를 하나의 메소드로 처리해준다.

@Controller
public class ExampleController{
    //... 비지니스 로직 생략
    @ExceptionHandler(value = NullPointerException.class)
    public ResponseEntity<ErrorResponse> handleException() {
       //... 에러 처리 로직
    }
}

위의 코드에서 @ExceptionHandler(value = NullPointerException.class) 를 통해 처리하고 싶은 exception 종류를 설정해주었다.

이제부터 ExampleController에서 NullPointerException 발생하면 @ExceptionHandler에 설정한 메소드가 동작하게 된다.

@ExceptionHandler를 설정함으로써 각 메서드마다 try-catch문을 사용하지 않고 한곳에서 에러를 관리 할 수 있게 되었다.

하지만 @ExceptionHandler는 설정된 컨트롤러에서만 작동한다 따라서 Exception를 전역으로 관리하고 싶어도 컨트롤러마다 @ExceptionHandler설정해 주어야한다.

@ControllerAdvice를 사용하면 이러한 불편함을 해결할수 있다.


@ControllerAdvice

@ControllerAdvice는 모든 컨트롤러를 보조 하는 기능을 제공해준다.

@ControllerAdvice안에서 @ExceptionHander를 설정해주면 모든 컨트롤러에서 발생하는 에러를 한곳에서 관리할수 있다.

@ControllerAdvice
public class ExampleAdvice {
    @ExceptionHandler(value = NullPointerException.class)
    public ResponseEntity<ErrorResponse> handleException() {
       //... 에러 처리 로직
    }
}

@ControllerAdvice가 선언된 ExampleAdvice 클래서 안에 @ExceptionHandler를 설정해 주었다.

이러면 @Controller가 선언된 곳에서 발생한 NullPointerException은 ExampleAdvice 클래스 안의 handleException()메소드가 관리한다.

스프링은 @ControllerAdvice+@ExceptionHandler 조합으로 컨트롤러에서 발생하는 모든 에러를 한곳에서 관리할수있게해준다.

profile
느리지만 꾸준히

0개의 댓글