230805 9장 api 예외 처리 공부

bluesky·2023년 8월 5일

TodayILearned

목록 보기
6/16

목차

-시작

  • 스프링 부트 기본 오류 처리
  • 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 동작 방식

    • 빈 모델뷰
    • 모델뷰 지정
    • null
  • 스프링이 제공하는 것들은 3가지임.

    • ExceptionHandlerExceptionResolver .
    • DefaultHandlerExcetionResolver
    • ResponseStatusExceptionResolver
  • ResponseStatusExceptionResolver

    • @ResponseStatus는 reason 부분에서 messageOSurce의 변수를 키를 넣을수도 있다
    • 동적 변경이 가능하고 내부 예외에 대해서 처리할때는 ResponseStatusException을 넣을수도 있다.
  • DefaultException Resolver’

    • TypeMismatch를 해결함.
      • 무조건 500 말고, 클라이언트 실수다 는 400 같은것.
  • ExceptionHandlerExceptionResolver

    • 주로 사람들이 이것을 많이 씀.
    • 아무튼 이거 많이 씀.
    • “@ExceptionHandler”이걸로 예외를 지정하고 어떻게 처리할지 적을 수 있다.
    • api 스렇게 한다면 @ResponseBody 가 필요할듯.
    • 더 편리하게
      • RestControlleradvice로 광역 적용 가능.

이제 위에꺼 빈틈 메꾸기.

완료.

profile
SMART https://github.com/dongseoki?tab=repositories

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기