목차
-시작
- 스프링 부트 기본 오류 처리
- HandlerExceptionResolver 시작
- HandlerExceptionResolver 활용
- 스프링이 제공하는 ExceptionResolver1
- 스프링이 제공하는 ExceptionResolver2
- @ExceptionHandler
- @ControllerAdvice
알게된 내용 정리하기.
시작.
API 처리를 위해서는 스프링 부트 기본 오류처리로는 부족하다.
그래서 더 세밀한 조정이 필요한데…
그것이 앞으로 설명할것.
스프링부트 기본 오류 처리.
뭐더라, 일단 수동으로 Exception을 캐치해서 throw 하는 방식.
- http request 중 accept를 application/json으로 하면은 errorController의 다른 메서드가 반응해서 json 응답을 볼 수 있음.
HandlerExceptionResolver
- 기본 오류처리로 하면, was에서 한번더 에러페이지를 찾는 과정을 거쳐야함.
- 이것을 해결하기 위해 ExceptionResolver라는 것이 있고, 이것을 이용하여 was에서 500에러 페이지로 이어지는 로직을 안할 수 있음.
스프링이 제공하는 ExceptionResolver
-
이것을 이용하면 WAS에 예외를 전달하지 않을수 있음
- 단 그래도 postHandle은 호출되지 않음. afterCompletion은 당연히 호출 되지만.
-
handlerExceptionResolver의 반환값에 따른 dispatcherServlet 동작 방식
-
스프링이 제공하는 것들은 3가지임.
- ExceptionHandlerExceptionResolver .
- DefaultHandlerExcetionResolver
- ResponseStatusExceptionResolver
-
ResponseStatusExceptionResolver
- @ResponseStatus는 reason 부분에서 messageOSurce의 변수를 키를 넣을수도 있다
- 동적 변경이 가능하고 내부 예외에 대해서 처리할때는 ResponseStatusException을 넣을수도 있다.
-
DefaultException Resolver’
- TypeMismatch를 해결함.
- 무조건 500 말고, 클라이언트 실수다 는 400 같은것.
-
ExceptionHandlerExceptionResolver
- 주로 사람들이 이것을 많이 씀.
- 아무튼 이거 많이 씀.
- “@ExceptionHandler”이걸로 예외를 지정하고 어떻게 처리할지 적을 수 있다.
- api 스렇게 한다면 @ResponseBody 가 필요할듯.
- 더 편리하게
- RestControlleradvice로 광역 적용 가능.
이제 위에꺼 빈틈 메꾸기.
완료.
좋은 정보 얻어갑니다, 감사합니다.