인용

스프링 MVC는 @ExceptionHandler 애노테이션이 붙어 있는 핸들러 메소드를 통해 예외를 처리할 수 있다. @ExceptionHandler는 예외를 던질 수 있는 핸들러 메소드와 동일한 컨트롤러 내에 존재하므로, 다른 여러 컨트롤러에서 발생하는 예외는 처리할 수 없다. @ExceptionHandler 대신에 @ControllerAdvice를 사용하면 여러 컨트롤러에서 발생하는 예외를 한곳에서 처리할 수 있다. 1

JavaDoc

지원되는 리턴 타입

The following return types are supported for handler methods:

  • A ModelAndView object (from Servlet MVC).
  • A Model object, with the view name implicitly determined through a RequestToViewNameTranslator.
  • A Map object for exposing a model, with the view name implicitly determined through a RequestToViewNameTranslator.
  • A View object.
  • A String value which is interpreted as view name.
  • @ResponseBody annotated methods (Servlet-only) to set the response content. The return value will be converted to the response stream using message converters.
  • An HttpEntity<?> or ResponseEntity<?> object (Servlet-only) to set response headers and content. The ResponseEntity body will be converted and written to the response stream using message converters.
  • void if the method handles the response itself (by writing the response content directly, declaring an argument of type ServletResponse / HttpServletResponse for that purpose) or if the view name is supposed to be implicitly determined through a RequestToViewNameTranslator (not declaring a response argument in the handler method signature).
  • ModelAndView 객체
  • view 이름으로 변환되는 String
  • HttpEntity<?>, ResponseEntity<?>
  • void

@ResponseStatus 와 조합 가능

You may combine the ExceptionHandler annotation with @ResponseStatus for a specific HTTP error status.

Examples

@ExceptionHandler(CustomerNotFoundException.class)
public ResponseEntity<?> notFoundException(CustomerNotFoundException e) {
  return ResponseEntity.status(HttpStatus.BAD_REQUEST)
    .body(e.getMessage());
}

참고문헌

  • Annotation Type ExceptionHandler
  • [JOS] 클라우드 네이티브 자바 / 조쉬 롱, 케니 바스타니 저/정윤진, 오명운, 장현희 역 / 책만 / 초판 1쇄 2018년 06월 29일

주석

  1. [JOS] 2.6장. 224쪽.