Rest API 서버에 HTTP 요청을 보낼 수 있는 클라이언트 툴 또는 라이브러리
목적
RestTemplate
Template의 의미
RestTemplate 이용하는 서비스 예시
의존 라이브러리 추가
dependencies {
...
...
implementation 'org.apache.httpcomponents:httpclient'
}
RestTemplete 적용 (객체 생성, URI 생성)
public class RestClientExample01 {
public static void main(String[] args) {
// (1) 객체 생성
RestTemplate restTemplate =
new RestTemplate(new HttpComponentsClientHttpRequestFactory());
// (2) URI 생성
UriComponents uriComponents =
UriComponentsBuilder
.newInstance()
.scheme("http")
.host("worldtimeapi.org")
// .port(80)
.path("/api/timezone/{continents}/{city}")
.encode()
.build();
URI uri = uriComponents.expand("Asia", "Seoul").toUri();
URI 생성 - UriComponents
URI 생성 - URI
RestTemplete 적용 (요청 전송)
// 상위 코드에서 이어짐
// 상황에 맞춰 3-1 ~ 3-4 중 선택하여 사용
// (3-1) Request 전송
String result = restTemplate.getForObject(uri, String.class);
System.out.println(result); // String 형식으로 값을 받음
// (3-2) Request 전송. WorldTime 클래스(DTO)로 응답 데이터를 전달 받는다.
WorldTime worldTime = restTemplate.getForObject(uri, WorldTime.class);
System.out.println("# datatime: " + worldTime.getDatetime());
// getForObject() : HTTP Get 요청을 통해 서버의 리소스를 조회
// (3-3) Request 전송. ResponseEntity로 헤더와 바디 정보를 모두 전달 받을 수 있다.
ResponseEntity<WorldTime> response =
restTemplate.getForEntity(uri, WorldTime.class);
System.out.println("# datatime: " + response.getBody().getDatetime());
System.out.println("# HTTP Status Code: " + response.getStatusCode());
System.out.println("# HTTP Status Value: " + response.getStatusCodeValue());
System.out.println("# Content Type: " + response.getHeaders().getContentType());
System.out.println(response.getHeaders().entrySet());
}
}
RestTemplete 적용 (요청 전송) - exchange() 를 사용한 응답 데이터 받기
// (3-4) Request 전송. exchange()를 사용한 일반화 된 방식
ResponseEntity<WorldTime> response =
restTemplate.exchange(uri,
HttpMethod.GET,
null,
WorldTime.class);
System.out.println("# datatime: " + response.getBody().getDatetime());
System.out.println("# timezone: " + response.getBody().getTimezone());
System.out.println("# day_of_week: " + response.getBody().getDay_of_week());
System.out.println("# HTTP Status Code: " + response.getStatusCode());
System.out.println("# HTTP Status Value: " + response.getStatusCodeValue());
}
}