어플리케이션이 RestTemplate를 생성하고, URI, HTTP 메소드 등의 헤더를 담아 요청
RestTemplate는 HttpMessageConverter를 사용하여 RequestEntity를 요청 메세지로 변환
RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보냄
ClientHttpRequest 는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신
RestTemplate 는 ResponseErrorHandler 로 오류를 확인하고 있다면 처리로직을 태움
ResponseErrorHandler 는 오류가 있다면 ClientHttpResponse 에서 응답데이터를 가져와서 처리
RestTemplate 는 HttpMessageConverter 를 이용해서 응답메세지를 java object(Class responseType) 로 변환
어플리케이션에 반환
@Service
public class ApiServiceImpl implements ApiService {
private final RestTemplate restTemplate;
public ApiServiceImpl(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Override
public List<User> getUsers(int start, int limit) {
ResponseEntity<List<User>> response =
restTemplate.exchange(
"https://jsonplaceholder.typicode.com/users/?_start=" + start + "&_limit=" + limit,
HttpMethod.GET,
null,
new ParameterizedTypeReference<>() {});
return response.getBody();
}
}
@Test
void getUsers() {
List<User> users = apiService.getUsers(0, 3);
Assertions.assertEquals(3, users.size());
}