1. RestTemplate이란?

Spring 3.0부터 지원하며 스프링에서 http 통신에 유용하게 쓸수 있도록 제공해주는 템플릿이다.

즉, API 통신해서 가져 올수 있도록 도와준다.

 

2. 예시코드

@GetMapping("/test")
    public ResponseEntity<List> testList(testVo testVo) {
        String url = "http://testurl.com"; // api url
      

  //get parameter 담아주기
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
                .queryParam("test1", testVo.getUserId())
                .queryParam("test2", testVo.getValue());
       HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        httpRequestFactory.setConnectTimeout(30000); // 연결시간 초과
        //Rest template setting
        RestTemplate restTpl = new RestTemplate(httpRequestFactory);
        HttpHeaders headers  = new HttpHeaders(); // 담아줄 header
        HttpEntity entity = new HttpEntity<>(headers); // http entity에 header 담아줌

        ResponseEntity<JSONArray>  responseEntity = restTpl.exchange(url, HttpMethod.GET, entity, JSONArray.class);
        L.info("responseEntity.getBody()" + responseEntity.getBody());
        List result = (List) responseEntity.getBody();

        return ResponseEntity.ok(result);
    }

 

3. 설명

HttpComponentsClientHttpRequestFactory :  RestTemplate 는 ClientHttpRequestFactory 로 부터 ClientHttpRequest 를 가져와서 요청을 보낸다.

 

RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
이렇게 써도 가능하나 다양한 설정을 추가하지 못한다.

 

POST 방법으로 하고 싶으면 HttpEntity를 선언할때 body부 를 넣어주면된다.

String body =~~; // 보통 map형식

HttpEntity entity = new HttpEntity(body,headers);

 

그리고 여기서는 return을 List로 받고싶어서 JSONArray를 썼는데, 

List<Object> 형태가 아닌 다양한 JSon 형태라면 JSONObject로 리턴받아 해당 값을 get해도 된다.

ResponseEntity<JSONObject>  responseEntity = restTpl.exchange(url, HttpMethod.GET, entity, JSONObject.class); 

responseEntity.getBody().get("example");

4. 참조 문서

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

 

RestTemplate (Spring Framework 5.1.7.RELEASE API)

Synchronous client to perform HTTP requests, exposing a simple, template method API over underlying HTTP client libraries such as the JDK HttpURLConnection, Apache HttpComponents, and others. The RestTemplate offers templates for common scenarios by HTTP m

docs.spring.io

해당 페이지에 Get, Post등 다양한 방법이 나와있다. 

나는 여기서 exchange 방법을 썼는데 HTTPMETHOD.GET / POST로 바꿔서 쓰면된다.

+ Recent posts