spring-boot-starter-web 라이브러리를 추가해야 RestTemplate을 사용할 수 있다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
RestTemplate을 new로 만들어서 사용해도 되고 아래처럼 @Bean으로 등록해서 사용해도 된다. 아래는 Builder를 통해 만든 방법이다.
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
public class MyService {
@Autowired
private RestTemplate restTemplate;
public MyData getData(String id) {
String url = "http://example.com/api/data/{id}";
return restTemplate.getForObject(url, MyData.class, id);
}
}
public class MyService {
@Autowired
private RestTemplate restTemplate;
public MyData createData(MyData data) {
String url = "http://example.com/api/data";
return restTemplate.postForObject(url, data, MyData.class);
}
}
HTTP 요청 헤더는 HttpHeaders 클래스를 사용하여 설정할 수 있다. HttpHeaders 객체를 생성한 후, set 메서드를 사용하여 요청 헤더를 설정하여 내가 원하는 헤더를 만들어 넣을 수 있다.
public class MyService {
@Autowired
private RestTemplate restTemplate;
public MyData getData(String id) {
String url = "http://example.com/api/data/{id}";
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + getToken());
HttpEntity<?> entity = new HttpEntity<>(headers);
ResponseEntity<MyData> response = restTemplate.exchange(url, HttpMethod.GET, entity, MyData.class, id);
return response.getBody();
}
}
헤더와 같이 바디도 설정할 수 있다.ㅣ HttpEntity를 통해 헤더와 같이 바디도 같이 설정 해주면 된다.
public class MyService {
@Autowired
private RestTemplate restTemplate;
public MyData createData(MyData data) {
String url = "http://example.com/api/data";
HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", "Bearer " + getToken());
HttpEntity<MyData> entity = new HttpEntity<>(data, headers);
ResponseEntity<MyData> response = restTemplate.exchange(url, HttpMethod.POST, entity, MyData.class);
return response.getBody();
}
}
spring에서는 restTemplate보다는 webclient를 사용하라고 권장하고 있다. 아직 deprecated 되지는 않았지만 다다음 버전때는 deprecate 될 수 있으니 미리 webclient를 공부해보는 것도 나쁘지 않을 것 같다.