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. 참조 문서
해당 페이지에 Get, Post등 다양한 방법이 나와있다.
나는 여기서 exchange 방법을 썼는데 HTTPMETHOD.GET / POST로 바꿔서 쓰면된다.
'DEVELOP > Backend' 카테고리의 다른 글
Spring에서 Async 처리 (@Async ) (0) | 2020.03.06 |
---|---|
테스트에서 @Transactionl 어노테이션 (0) | 2019.07.29 |
트랜잭션 속성 @Transactional (0) | 2019.07.29 |
Filter, Interceptor, AOP의 차이 이해하기~! (0) | 2019.07.26 |
JPA 의 개념과 간단 예제 (0) | 2019.03.11 |