[Spring] Rest API의 Request, Response 핸들링
Published in
4 min readDec 16, 2020
REST api 에러 핸들링을 하면서 궁금했던 점들을 정리해 보겠습니다.
- RestTemplate 을 사용하여 rest api 를 호출하고 Response를 받아오는 방식이 어떻게 이루어 지는지? (HttpEntity와 ClientHttpRequestFactory)
- Rest api 오류 응답을 custom 하게 처리하는 방법 (ResponseErrorHandler)
Spring RestTemplate class
스프링 애플리케이션에서 REST api 에 접근하는 것은 Spring RestTemplate 클래스 사용을 중심으로 이루어진다. RestTemplate은 스프링의 다른 Template (ex. JdbcTemplate, JmsTemplate)
과 동일한 방식으로 설계되어 복잡한 작업을 수행하기 위한 기본 동작을 제공함으로써 단순하게 접근할 수 있도록 한다. (구체적인 사용 예시 링크!)
Spring framework 5에서 webFlux 스택과 함께 spring 은 WebClient 라는 새로운 Http client를 도입했다. WebClient 는 RestTemplate에 대한 최신 대체 Http 클라이언트이다. 기존의 동기식 Api 를 제공할 뿐만 아니라 논 블록킹과 비동기 접근 방식도 지원하기 때문에 앞으로는 RestTemplate을 사용하지 않게 될 것이다.
- application 이 RestTemplate을 생성하고, URI, Http 메소드 등의 헤더를 담기를 요청한다.
- RestTemplate은 HttpMessageConverter를 통해 requestEntity를 요청 메시지(여기선 JSON 방식)로 변환한다.
- RestTemplate은 ClientHttpRequestFactory 로 부터 ClientHttpRequest를 가져와 Request를 보낸다.
- ClientHttpRequest는 요청 메시지를 만들어 HTTP(S) 프로토콜을 통해 REST API와 통신한다.
- RestTemplate은 ResponseErrorHandler로 오류를 확인하고 있다면 처리로직을 태운다.
- ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답 데이터를 가져와 처리한다.
- RestTemplate은 HttpMessageConverter를 이용해 응답 메시지를 자바 객체로 변환한다.
- 어플리케이션에 반환된다.
에러처리
default ResponseErrorHandler 를 사용해 HTTP Error 를 제어한다. restTemplate.setErrorHandler를 통해 커스텀 핸들러를 등록할 수 있다.
ResponseErrorHandler 의 메소드들
- hasError : 주어진 응답에 오류가 있는지 여부를 나타냅니다.
구현은 일반적으로 응답의 HttpStatus를 검사합니다. - handleError :주어진 응답에서 오류를 처리합니다.
이 메서드는 hasError (ClientHttpResponse)가 true를 반환 한 경우에만 호출됩니다.
참고