Spring

[Spring] @ControllerAdvice / @RestControllerAdvice 란?

kyunge_ev 2023. 1. 1. 22:15
  • 전역적으로 예외를 핸들링할 수 있는 어노테이션
  • 전 계층에서 발생한 예외를 한 곳에서 관리하고 처리할 수 있게 도와주는 어노테이션
  • Custom Exception을 정의하여 사용 할 수 있음 

@ControllerAdvice , @RestControllerAdvice 의 차이점

  • 두 어노테이션의 차이는 @Controller 와 @RestController의 차이점과 동일
  • @RestController 는 @ResponseBody가 포함되어 있어 응답을 JSON 형식으로 내려줌

@ExceptionHandler 란?

  • @ControllerAdvice, @RestControllerAdvice와 함께 사용되어지는 어노테이션
    • 위 어노테이션이 적용된 Bean 내에서 발생한 예외를 받아 처리할 수 있는 기능
  • value 값을 가지고 있음 👉 value에 선언한 class의 예외만 처리함(value = 는 생략가능)
@RestControllerAdvice
public class ExceptionManager {
    @ExceptionHandler(value = RuntimeException.class)
    public ResponseEntity<?> runtimeExceptionHandler(RuntimeException e) {
        //...
    }

사용방법

exception 패키지를 생성하여 ExceptionManger 클래스로 @RestControllerAdvice를 사용하였음
클래스명은 원하는 걸로 지정해주어도 됨

@RestControllerAdvice
public class ExceptionManager {
    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<?> runtimeExceptionHandler(RuntimeException e) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body(e.getMessage());
    }
}