본문 바로가기

스프링/스프링 MVC

예외 처리 핸들러: @ExceptionHandler

@ExceptionHandler

어떤 요청을 처리하다가 예외들이 발생했을 때 직접 정의한 핸들러를 통해 예외를 처리해서 응답할 수 있다.

예제

  • RuntimException을 상속받은 EventException을 하나 만들었다.

 

  • 그리고 예외가 발생했을 때 보여줄 페이지를 만든다.
  • 빨간 박스의 message에 예외 메시지를 담아 보여줄 것이다.

 

  • 컨트롤러에서 @ExceptionHandler를 사용한 메서드를 하나 작성한다.
  • 메서드 파라미터에 원하는 Exception을 넣으면 예외 처리가 가능하다.
  • EventException을 파라미터로 넣었으므로 EventException 발생 시 eventErrorHandler가 동작하여 message를 담아 줄 것이다.
  • 그리고 위에서 작성한 error.html로 view를 바인딩해줄 것이다.
  • /make/error에 접속 시 바로 예외를 던지게 만들었다.
  • 테스트를 해보면 잘 동작하는 것을 알 수 있다.

구체적인 타입으로 매핑

  • EventException Handler와 EventException의 부모인 RuntimeException Handler를 만들어서 테스트를 해보면 더 구체적인 타입인 EcentException Handler가 동작된다.

 

  • 메서드 파라미터가 아닌 Annotation에도 넣어줄 수 있으며 한 번에 여러 가지 타입을 정의할 수도 있다.

REST API의 경우

  • REST API의 경우 응답 본문에 에러에 대한 정보를 담아줘야 한다.
  • ResponseEntity를 통해 상태 코드를 설정하고 body에 에러 정보를 담아 줄 수 있다.

  • /api/events/exception/test로 포스트 요청을 보내면 예외를 던지게 만들었다.

 

 

  • 실제 테스트를 해보면 잘 동작하고 body에 에러 정보가 들어가 있는 것을 확인할 수 있다.

참고 자료