STUDY/Spring
Spring Boot | RestTemplate
개미606
2021. 5. 13. 13:12
RestTemplate
- Spring Framework에서 제공하는 동기식 템플릿 메소드 API
- HTTP client로서 보편적인 API요청을 더 쉽게 도와준다
비동기 non-blocking HTTP Client가 필요하다면
WebClient
를 사용하면 된다.WebClietnt
는 동기 및 비동기, 스트리밍 시나리오를 모두 지원함
비동기를 지원하는 AsyncRestTemplate도 있었지만 스프링 5.0부터 deprecated되었음 -> WebClient를 사용해라..
어떻게 사용하나..
일단 spring-boot-starter-web
라이브러리가 추가되어있으면 자동으로 하위 항목으로 딸려온다.
보통은 bean으로 등록하여 사용한다.
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
그리고 더 보통은 bean으로 등록 할 때 여러 설정을 추가한다.
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()))
.setBufferRequestBody(false)
.setConnectTimeout(Duration.ofMillis(5000))
.setReadTimeout(Duration.ofMillis(5000))
.additionalMessageConverters(new MappingJackson2HttpMessageConverter())
.build();
}
RestTemplateCustomizer
를 이용하면 더 상세하게 설정을 할 수 있다.
주요 메서드
요청하는 메서드들의 종류는 다앙하다. 그 중 많이 사용 하는 것들을 적어보자면
[method]ForEntity
: 해당 메서드로 요청하고, ResponseEntity로 응답받는다 ex)getForEntity
는 GET으로 요청[method]ForObject
: 해당 메서드로 요청하고, 특정 객체로 응답받는다exchange
: HTTP 메서드를 직접 지정하여 요청하며, 원하는 객체로 응답받는다
요청 예시
postForEntity
로 요청하는 예시다. 기본 사용 법은 url, HttpEntity, 응답 값을 받을 타입의 클래스를 전달한다.
public <T> ResponseEntity<T> postForEntity(String url,
@Nullable
Object request,
Class<T> responseType,
Object... uriVariables)
throws RestClientException
이런식으로 사용한다.
ResponseEntity<HashMap> responseEntity = restTemplate.postForEntity(url, httpEntity, HashMap.class);
HttpEntity?
HttpEntity
는 HTTP 요청 / 응답에 사용되는 값으로, headers
와 body
를 갖는다. 아래처럼 바로 생성할 수도 있고, setter로 주입할 수도 있다.
HttpEntity(T body, MultiValueMap<String,String> headers)