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
728x90
반응형
'Spring > spring mvc 2 스터디' 카테고리의 다른 글
[Spring] API 예외 처리(ExceptionResolver) (0) | 2022.07.02 |
---|---|
[Spring] API 예외 처리(HandlerExceptionResolver) (0) | 2022.06.26 |
[Spring] 예외 처리 이론 및 기초 (0) | 2022.06.25 |
[Spring] Filter Vs Interceptor (0) | 2022.06.01 |
[Spring] Interceptor (0) | 2022.06.01 |
댓글