반응형

@ExceptionHandler

특정 예외가 발생할 경우 발생한 요청을 처리해주는 핸들러


  • EventException이라는 클래스를 만든다. (RuntimeException 상속)

    public class EventException extends RuntimeException {
    }

  • @ExceptionHandler 정의

    @ExceptionHandler
    public String eventErrorHandler(EventException exception, Model model) {
      model.addAttribute("message","event error");
      return "error";
    }
    
    @ExceptionHandler
    public String runtimeErrorHandler(RuntimeException exception, Model model) {
      model.addAttribute("message","runtime error");
      return "error";
    }
    
    ...
    
    @GetMapping("/events/form/name")
      public String eventsFormName(Model model) {
      throw new EventException();     // 위에 두개가 있을 경우 타입이 구체적으로 맞는 핸들러를 실행
    }
    // 두개를 모두 처리하고 싶을경우는 아래처럼
    // argument에서는 상위 클래스 타입으로 와야한다. (RuntimeException)
    @ExceptionHandler({EventException.class, RuntimeException.class})
    public String eventErrorHandler(RuntimeException exception, Model model) {
      model.addAttribute("message","event error");
      return "error";
    }

  • error.html 생성

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Error</title>
    </head>
    <body>
    <div th:if="${message}">
        <h2 th:text="${message}"></h2>
    </div>
    
    </body>
    </html>

  • 예외 발생 처리

    Screen Shot 2020-02-04 at 11 29 23 PM

  • Rest api에서 사용할 때

    • ResponseEntity를 리턴타입으로 사용할 수 있다.
    @ExceptionHandler
    public ResponseEntity errorHandler() {
      return ResponseEntity.badRequest().body("can't create event as ...");
    }

    참고 : https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-exceptionhandler

반응형

BELATED ARTICLES

more