728x90
반응형

@ExceptionHandler와 @ResponseStatus를 사용한 에러 핸들링 (AnnotationMethodHandlerExceptionResolver)



@ExceptionHandler는 컨트롤러 파일 내부에서 사용한다.


@RequestMapping(value = "/dataformat", method = RequestMethod.GET)
 public String throwDataFormatException(Locale locale, Model model)
 throws DataFormatException {
 
     logger.info("This will throw a DataFormatException");
 
     boolean throwException = true;
 
     if (throwException) {
         throw new DataFormatException("This is my DataFormatException");
     }
 
     return "home";
 }
 
 @ExceptionHandler(DataFormatException.class)
 @ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "My Response Status Change….!!")
 public void handleDataFormatException(DataFormatException ex,
     HttpServletResponse response) {
 
     logger.info("Handlng DataFormatException - Catching: " + ex.getClass().getSimpleName());
 }


순서를 보면 다음과 같다.


1. 사용자가 '/dataformat' 에 접속한다.

2. DataFormatException이 발생한다.

3. @ExceptionHandler(DataFormatException.class) 어노테이션이 이 익셉션을 캐치하여 처리한다.

4. @ResponseStatus 어노테이션을 통해 원래의 response code를 사용자가 지정한 NOT_FOUND 코드로 바꿔서 출력한다. (404)



정리하자면,


- @ExceptionHandler(Exception.class) 를 컨트롤러 내부에 선언함으로서 해당 컨트롤러의 익셉션을 캐치하고 원하는대로 처리할 수 있다.

- @ResponseStatus 어노테이션을 사용하면 단순 처리뿐만 아니라, 사용자에게 원하는 response code와 원인을 리턴 해줄수 있다.


단점이라면,

각 컨트롤러마다 모두 설정을 해줘야 한다.


728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,