- Spring MVC 마스터하기 예외처리 52022년 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 다음글이전글이전 글이 없습니다.댓글