ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외 처리 핸들러: @ExceptionHandler
    SPRING/스프링 MVC 2021. 7. 13. 00:43

    특정 예외가 발생한 요청을 처리하는 핸들러 정의 

    - 지원하는 메소드 아규먼트 (해당 예외 객체, 핸들러 객체, ...) 

    - 지원하는 리턴 값 

    - REST API의 경우 응답 본문에 에러에 대한 정보를 담아주고,
      상태 코드를 설정하려면 ResponseEntity를 주로 사용한다.

    public class EventException extends RuntimeException{
    
    }
    
    
    @Controller
    @SessionAttributes("event")
    public class SampleController2 {
    
        @ExceptionHandler({EventException.class, RuntimeException.class})
        public String eventErrorHandler(EventException exception, Model model) {
            model.addAttribute("message","event error");
            return "error";
        }
    
      // Exception화면
      @GetMapping("/events/exception")
      public String eventException(Model model) {
          throw new EventException();
      }
    
    }

     

    error.html 페이지

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

     

    - 컨트롤러에서 @ExceptionHandler를 사용한 메서드를 작성하여, 메서드 파라미터에 원하는 Exception을 넣으면 예외 처리를 핸들링할 수 있다.

    - 위 예시의 경우 EventException 파라미터를 통하여 @ExceptionHandler를 호출한다.

    - @ExceptionHandler에서는 error.html로 model 정보를 담아서 넘겨준다.

     

    결과

     

    @ExceptionHandler({EventException.class, RuntimeException.class})

    -> 위와 같이 어노테이션에 Exception 클래스들을 선언하면 해당 Exception들만 핸들링한다.

     

    @RestController에서 @ExceptionHandler 사용하기

    @RestController
    @RequestMapping("/api/events")
    public class EventApi {
    
        @ExceptionHandler(EventException.class)
        public ResponseEntity eventErrorHandler(EventException exception, Model model) {
            return ResponseEntity.badRequest().body("EventExceptin ERROR 발생");
        }
        // 에러
        @PostMapping(value = "/error")
        public Event createEventWithException(HttpEntity<Event> request) {
            throw new EventException();
        }
    
    }

Designed by Tistory.