@ControllerAdvice로 모든 컨트롤러에서 발생할 예외 정의 -> @ExceptionHandler로 발생하는 예외마다 처리할 메소드 정의
모든 예외 클래스는 Throwable class를 상속받고 있다.
예외 클래스 중 RuntimeException은 unchecked exception
그 외 예외 클래스는 checked exception이다.
@ControllerAdvice
Spring 제공 어노테이션. @Controller나 @RestController에서 발생하는 예외를 한 곳에서 관리, 처리할 수 있게 하는 어노테이션
에러 처리 할 패키지 범위를 설정할 수 있다. 기본값은 모든 Controller
@RestControllerAdvice
예외 발생 시 json 형태로 결과 반환해주는 어노테이션
예외 처리 상황 발생 시 처리할 handler 명시하는 어노테이션
어떤 에러 클래스를 처리할건지 설정할 수 있음(@ExceptionHandler(--Exception.class))
Exception.class는 최상위 클래스로. 하위 세부 예외 처리 클래스로 설정한 핸들러 존재 시 해당 핸들러로 우선 처리한다. 그 외 해당사항이 없는 예외는 Exception.class에서 처리
@ControllerAdvice로 설정된 클래스 내에서 메소드로 정의할 수 있지만, 각 controller 안에 설정도 가능하다.
전역 설정(@ControllerAdivce)보다 지역설정(Controller)로 정의한 handler가 우선순위를 가진다.