Rest Template이란 HTTP 통신을 위한 도구로 RESTful API 웹 서비스와의 상호작용을 쉽게 하여 외부 도메인에서 데이터를 가져오거나 전송할 때 사용된다. Spring 3.0부터 지원되었으며 REST API 호출 이후 응답을 기다리는 동기 방식이다. 서버에서 다른 서버로 요청을 보낼 때 간편하게 요청을 보낼 수 있도록 해준다. 즉 우리 서버는 클라이언트 입장이 되어 다른 서버(EX. 네이버 오픈 API)에 요청을 진행하는 것이다.
- Client 입장 서버
private final RestTemplate restTemplate;
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
public ItemDto getCallObject(String query) {
// 요청 URL
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:7070")
.path("/api/server/get-call-obj")
.queryParam("query", query)
.encode()
.build()
.toUri();
ResponseEntity<ItemDto> responseEntity = restTemplate.getForEntity(uri, ItemDto.class);
return responseEntity.getBody();
}
- Server 입장 서버
List 등을 조회하여 요청받은 검색어에 맞는 객체를 반환한다.
요청을 보낼 때 Header에 특정 정보를 같이 전달하고 싶다면 RestTemplate의 exchange를 사용한다.
public List<ItemDto> exchangeCall(String token) {
URI uri = UriComponentsBuilder.
(...)
User user = new User();
RequestEntity<User> requestEntity = RequestEntity
.post(uri)
.header("X-Authorization", token)
.body(user);
ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);
return fromJSONtoItems(responseEntity.getBody());
}
exchange 메서드의 첫 번째 파라미터에 RequestEntity 객체를 생성하여 전달해주면 uri, header, body의 정보를 한 번에 전달 가능하다.