Free Lines Arrow
본문 바로가기
Spring/spring mvc 2 스터디

[Spring] API 예외 처리(ExceptionHandler)

by skahn1215 2022. 7. 2.
728x90
반응형

API 예외 처리

  • BasicErrorController: HTML 화면을 제공할 경우 사용
     - 단순하게 5xx, 4xx 관련된 오류 화면을 보여주면 된다.
  • ExceptionHandler: API Exception 을 다루는데 좋다.

 

@ExceptionHandler

  • 다른 ExcpetionResolver 를 사용하게 되면 불필요 하게 ModelAndView를 반환해야 했다.
  • 또 한 Response 값을 직접 넣어줘야 되는 불편 함이 있었다.
  • ExceptionHandlerExceptionResolver 로 편한하게  예외처리를 할 수 있다
  • ExceptoinResolver 중에 우선 순위가 제일 높다

 

ExceptionHandler 예제

  • @ExceptionHandler(처리할익셉션.class)
  • 이렇게 하면 지정한 예외 및 자식들도 잡을수 있다.
  • 단 같은 컨트롤러와 같은 클래스에 있어야 한다는 단점이 있다.
@ExceptionHandler(IllegalArgumentException.class)
public ErrorResult illegalExHandle(IllegalArgumentException e) {
    log.error("[exceptionHandle] ex", e);
    return new ErrorResult("BAD", e.getMessage());
}

 

여러 예외 처리

 @ExceptionHandler({AException.class, BException.class})
  public String ex(Exception e) {
      log.info("exception e", e);
  }

 

예외 생략

@ExceptionHandler
  public ResponseEntity<ErrorResult> userExHandle(UserException e) {}

 

화면처리

@ExceptionHandler(ViewException.class)
  public ModelAndView ex(ViewException e) {
      log.info("exception e", e);
      return new ModelAndView("error");
  }

 

자식까지 잡는 다면 우선순위는?

  • 자세한게 선언한 익셉션이 예외를 가진다.
@ExceptionHandler(부모예외.class) public String 부모예외처리()(부모예외 e) {}
@ExceptionHandler(자식예외.class) public String 자식예외처리()(자식예외 e) {}

 

 

@ControllerAdvice

  • 컨트롤러, 익셉션처리 클래스를 분리 할 수가 있다.
  • ControllerAdvice를 선언하면 예외가 발생시 알아서 잡아준다.
@RestControllerAdvice
 public class ExControllerAdvice {
      @ExceptionHandler
      public ResponseEntity<ErrorResult> userExHandle(UserException e) {
          log.error("[exceptionHandle] ex", e);
          ErrorResult errorResult = new ErrorResult("USER-EX", e.getMessage());
          return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST);
    }
}

 

특정 컨트롤러 지정 가능

// Target all Controllers annotated with @RestController
  @ControllerAdvice(annotations = RestController.class)
  public class ExampleAdvice1 {}

 

 

 

 

참고:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard

 

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 - 인프런 | 강의

웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습할 수 있

www.inflearn.com

 

728x90
반응형

댓글