Resttemplate

개발새발·2023년 5월 7일
0

spring

목록 보기
23/26
post-custom-banner

Spring 을 사용하게 되면서, resttemplate 를 사용하는 것을 보게 되었는데 자세히 알고 있지 않은듯하여 정리하게 되었다.

🤔 RestTemplate이란 뭘까?

Spring에서 Rest방식의 API를 호출할 수 있게 해주는 Spring 내장 클래스이다. Rest API 서비스를 요청하여 응답받을 수 있으며, HTTP 프로토콜 메소드(GET, POST, DELETE, PUT)에 적합한 여러 메소드들을 제공한다. (*deprecated된다는 소문은 있었지만, 실제로 deprecated 되지 않았음.)


🍀 RestTemplate 특징

  • 사용하기 편하고 직관적이다.
  • Spring 3.0부터 지원하는 Spring 의 HTTP 템플릿이다.
  • Restful의 원칙을 지킬 수 있고, HTTP 메서드들에 적합한 여러 메서드를 제공한다.
  • JSON, XML, String 응답이 모두 가능하다.
  • Blocking I/O기반의 동기방식을 사용한다.
  • Header과 ContentType등을 세팅하여 외부 API호출을 할 수 있다.

⭕ 동작원리

(1) 어플리케이션이 RestTemplate를 생성하여 URL, HTTP 메소드등을 헤더에 담아 요청을 보낸다.

(2) RestTemplate 이 HttpMessageConverter를 사용하여 request body에 담을 message(json등)로 변환한다. (이때 메세지 형태는 상황에 따라 다를 수 있다.)

(3) ClientHttpRequestFactory에서 ClientHttpRequest를 받아와서 요청을 전달하게 된다.

(4) ClientHttpRequest가 요청을 수행한다.

(5) RestTemplate이를 통해 ResponseErrorHandler에러를 핸들링해준다.

(6) ClientHttpResponse가 응답 데이터를 가져오고, 오류가 있으면 ResponseErrorHandler에서 처리한다.

(7) MessageConverter에서 response body의 message를 java object로 변환한다.

(8) 결과를 어플리케이션에 반환해준다.


💐 사용법

RestTemplate restTemplate = new RestTemplate();

HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));
Foo foo = restTemplate.postForObject(fooResourceUrl, request, Foo.class);


cc. https://dejavuhyo.github.io/posts/spring-resttemplate/ , https://sjh836.tistory.com/141

profile
발새발개
post-custom-banner

0개의 댓글