Programming/Spring

[Spring] RestTemplate

JIHYEON LEE 2021. 12. 29. 20:34

RestTemplate

Spring해서 제공하는 http 통신에 유용하게 사용할 수 있는 템플릿

REST 방식으로 api를 호출할 수 있는 Spring 내장 클래스 (= RESTFul 원칙을 지킬 수 있음)

json, xml 응답을 모두 받을 수 있음

Connect Pool을 사용하지 않음으로 객체를 생성할 때 인자로 ClientHttpRequestFactory의 구현체를 사용해야 함

Spring 3.0부터 지원 가능

 

RestTemplate Method HTTP Method 설명
excute Any  
exchange Any 헤더를 세팅해서 HTTP Method로 요청 보낸 후 ResponseEntity로 반환 받음
getForObject GET get 요청을 보내고 java Object로 반환 받음
getForEntity GET get 요청을 보내고 ResponseEntity로 반환 받음
postForLocation POST post 요청을 보내고 java.net.URI로 반환 받음
postForObject POST post 요청을 보내고 ResponseEntity로 반환 받음
put PUT  
delete DELETE  
headForHeaders HEAD  
optionsForAllow OPTOINS  

 

 

 

RestTemplate를 사용해서 api 호출하기

    private RestTemplate restTemplate = getRestTemplate();

    // connection pool 설정
    public RestTemplate getRestTemplate() {
        HttpClient httpClient = HttpClientBuilder.create()
                .setMaxConnTotal(100)           // 최대로 오픈되는 커넥션 수
                .setMaxConnPerRoute(5)          // IP, 포트 1쌍에 대해 수행할 커넥션 수
                .build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setReadTimeout(5000);           // 읽기시간초과 (ms)
        factory.setConnectTimeout(3000);        // 연결시간초과 (ms)
        factory.setHttpClient(httpClient);

        return new RestTemplate(factory);
    }

    public MovieResponseDto requestMovieTrending(String url) {
        final HttpHeaders headers = new HttpHeaders();
        final HttpEntity<String> entity = new HttpEntity<>(headers);

        return restTemplate.exchange(url, HttpMethod.GET, entity, MovieResponseDto.class, headers).getBody();
    }

 

getRestTemplate()

ClientHttpRequestFactory를 통해 connect pool을 설정해서 RestTemplate 객체를 생성하여 return

 

restTemplate.exchange(url, HttpMethod.GET, entity, MovieResponseDto.class, headers)

Get 방식으로 요청을 보내서 MovieResponseDto 형식으로 반환 받음

header 세팅이 필요한 경우 HttpHeader를 통해 세팅해서 같이 요청 보내면 됨

 

HttpClient

org.apache.http.client.HttpClient 사용

implementation('org.apache.httpcomponents:httpclient:4.5.13')

java.net.http.httpClient 사용할 경우 HttpClientBuilder()가 먹히지 않음

 

 

 

 

 

reference

     -  [Spring] RestTemplate 에 대한 정리

        https://bloowhale.tistory.com/20

     -  스프링 RestTemplate 정리(요청 함)

        https://velog.io/@soosungp33/스프링-RestTemplate-정리요청-함

     -  RestTemplate (정의, 특징, URLConnection, HttpClient, 동작원리, 사용법, connection pool 적용)

        https://sjh836.tistory.com/141