• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 예외처리 5
        2022년 06월 11일
        • starryeye
        • 작성자
        • 2022.06.11.:08

        이번엔 API 응답의 경우 예외처리 방법에 대해 알아보자..

        (html 응답의 경우 특정 경로에 400대, 500대 오류페이지만 만들어주면 됐었다..)

         

        예외가 발생 했을 때.. HTTP API 응답

        보통 요청을 보낼때 HTTP header에 accept 값으로 application/json 으로 들어온다.

         

        서블릿을 이용할 경우..

        accept 가 다르게 들어오는것을 활용하여..

        전용 컨트롤러를 만들어준다.

        예외처리 2번 포스팅의 ErrorPage 객체를 등록해주는 WebServerFactoryCustomizer 구현체의 연장선이다.

        produces 요소를 활용하여 요청 Http header의 accept가 application/json 인 경우에 적용되는 컨트롤러로 만들어준다.

        jackson 라이브러리는 위와 같이 Map 자료구조를 json으로 변환 가능하다..

         

        request.getAttribute로 얻을 수 있는 정보로 상태코드를 받아 응답에 그대로 적용해준다.

         

        참고>

        sendError로 만든 예외는 상태코드를 개발자가 지정해줘서 개발자가 의도한 상태코드로 응답을 내려줄 수 있지만

        일반 예외로 발생 했을 경우.. 서블릿이 지정한 상태코드로 들어가게 될것이다.

         

         

        스프링 부트가 제공하는 BasicErrorController를 활용하여 예외발생에 따른 Http API 응답

        위는 BasicErrorController의 코드 중 일부이다.

        errorHtml 메서드 컨트롤러는 요청 Http header accept 가 text/html 일 경우 호출된다.

        error 메서드 컨트롤러 요청 Http header accept 가 text/html 이 아닌 경우 모두 해당되며..

        json 형태로 응답된다.

         

        <참고>

        http status는 서블릿을 사용한 경우와 동일하게 동작한다.

        -> getStatus(request) 내부 로직에 똑같이 구현되어있음

         

        실제 응답은..

        뷰 응답에서 BasicErrorController는 여러 기본 정보들을 model에 담아주는 것 처럼

        json에서도 동일한 정보들을 넣어서 응답으로 내려주게 되며

        이는 application.properies에서 넣을지 말지 선택 할 수 있다.

         

        결론..

        BasicErrorContoller에서 제공하는 API 응답 기능은..

        개발관점에서는 따로 할게 없으니 편리하지만, 아래 두가지가 문제이다.

        1. 일반 예외의 경우 Http status 조절을 못한다.

        2. 개발자가 정한 사양대로의 응답 데이터로 못 내려준다.

        (BasicErrorController가 기본으로 제공하는 응답 json 데이터가 내려감)

         

        따라서.. Html 응답은 BasicErrorController를 사용하면 편하고

        Http API 응답은 다른 방법을 알아봐야한다.

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC 마스터하기 예외처리 7  (0) 2022.06.18
        Spring MVC 마스터하기 예외처리 6  (0) 2022.06.18
        Spring MVC 마스터하기 예외처리 4  (0) 2022.06.11
        Spring MVC 마스터하기 예외처리 3  (0) 2022.06.11
        Spring MVC 마스터하기 예외처리 2  (0) 2022.06.11
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바