이번에 spring boot 미니 프로젝트에서 open api 에 사용하고 있는 RestTemplate에 대해 찾아보고 정리해보려 한다.
RestTemplate
스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿
Spring 3부터 지원 되고, REST API 호출이후 응답을 받을 때까지 기다리는 동기방식
메서드 | HTTP | 설명 |
getForObject | GET | 주어진 URL 주소로HTTP GET 메서드로 객체로 결과를 반환받는다. |
getForEntity | GET | 주어진 URL 주소로 HTTP GET메서드로 결과는 ResponseEntity로 반환 받는다. |
postForLocation | POST | POST 요청을 보내고 결과로 헤더에 저장된 URI를 결과로 반환받는다. |
postForObject | POST | POST 요청을 보내고 객체로 결과를 반환받는다. |
postForEntity | POST | POST 요청을 보내고 결과로 ResponseEntity로 반환받는다. |
delete | DELETE | 주어진 URL 주소로 HTTP DELETE 메서드를 실행한다. |
headForHeaders | HEADER | 헤더의 모든 정보를 얻을 수 있으면 HTTP HEAD 메서드를 사용한다. |
put | PUT | 주어진 URL 주소로 HTTP PUT 메서드를 실행한다. |
pactForObject | PATCH | 주어진 URL 주소로 HTTP PATCH 메서드를 실행한다. |
optionsForAllow | OPTIONS | 주어진 URL 주소에서 지원하는 HTTP 메서드를 조회한다. |
exchange | any | HTTP 헤더를 새로 만들 수 있고 어떤 HTTP 메서드도 사용가능하다. |
execute | any | Request/Response 콜백을 수정할 수 있다. |
참고사이트를 보면 여러 메서드와 예시문을 볼 수 있다.
나는 여기서 내가 이용한 메서드에 관해서만 정리해 보고자 한다.
1.
config 패키지를 생성하여 Tistory 디렉토리 생성 후, Bean 관리용 파일을 만들었다.
여기서 RestTemplate 을 @Bean 을 걸어두고
2.
@Service 서비스 로직 안에 RestTemplate 을 사용했다.
아직 수정 중이라 이 로직 또한 서비스에서 분리하거나 코드정리 좀 할 생각이다.
참고사이트를 참고해보면
get 요청에 header 값이 필요한 경우, get 메소드에서는 header를 추가 할 수 가 없다고 한다.
그래서 exchange 메서드를 사용해야 한다.
현재 responseDTO로 response를 받았는데
2-1.
DTO를 쓰기 전에는
이런 식으로 사용했다.
2-2.
DTO를 받았던 부분을 exchange 말고 다른 방식으로 바꿀 수 있다고 하여 참고 중인데
getForObject 이다.
URI 매개변수를 사용하는 것인데, URI 매개변수를 사용할 때는 URL 객체를 구성하여 호출해야 한다.
위에서 이미 builder에 넣었기 때문에 형식에 맞춰서 넣어주면 됐다.
형식 :
// public <T> T getForObject(java.net.URI url, Class<T> responseType)
String result = restTemplate.getForObject(uri, String.class);
참고사이트
https://juntcom.tistory.com/141
https://zeroco.tistory.com/118
https://wecandev.tistory.com/41