
오늘은 ResetTemplate에 대해서 알아보고자 한다.
RestTemplate
RestTemplate은 Spring Framework에서 Restful HTTP 요청을 위해 제공하는 클래스이다. 주로 아래와 같은 상황때 사용한다.
- Spring Boot 애플리케이션이 외부 RESTful API와 상호작용해야 할 경우
- 다양한 목적으로 다른 웹 서비스의 데이터를 가져와야할 경우
- 복잡한 구성없이 HTTP 클라이언트를 구축하는 간단한 효율적인 방법을 원하는 경우
작동은 다음과 같이 진행된다.

1. 어플리케이션이 RestTemplate을 생성하고, URI, HTTP 메소드 등을 헤더를 담아 요청한다.
2. RestTemplate는 HttpMessageConverter을 사용하여 requestEntity를 요청 메세지로 변환한다.
3. RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보낸다.
4. ClientHttpRequest는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신한다.
5. RestTemplate는 ResponseErrorHandler로 오류를 확인하고 있다면 처리하는 로직을 실행한다.
6. ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답데이터를 가져와 처리한다.
7. RestTemplate는 HttpMessageConverter를 이용하여 응답메세지를 Json으로 변환한다.
8. 어플리케이션에 반환한다.
사용방법
일단 RestTemplate을 사용하기 위해서 restTemplateBuilder을 주입받아 사용한다.
- RestTemplateService.java
@Service
public class RestTemplateService {
private final RestTemplate restTemplate;
public RestTemplateService(RestTemplateBuilder builder) {
this.restTemplate = builder.build();
}
}
getForObject, getForEntity
Http GET 메소드를 이용하여 데이터를 받을때 해당 함수를 사용한다. 해당 함수를 사용하는 예는 다음과 같다.
- getForObject : 주어진 URL 주소로 HTTP GET 메서드로 결과는 객체로 결과를 반환받는다.
- getForEntity : 주어진 URL 주소로 HTTP GET 메서드로 결과는 ReponseEntity로 반환받는다.
@Service
public class RestTemplateService {
// http://localhost:9090/api/server/hello 로 요청해서 response를 받아오기
public UserResponse hello(){
// uri 주소 생성
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:9090") //http://localhost에 호출
.path("/api/server/hello")
.queryParam("name", "steve") // query parameter가 필요한 경우 이와 같이 사용
.queryParam("age", 10)
.encode()
.build()
.toUri();
System.out.println(uri.toString());
RestTemplate restTemplete = new RestTemplate();
// entity로 데이터를 가져오겠다(Get)~~
ResponseEntity<UserResponse> responseEntity = restTemplete.getForEntity(uri, UserResponse.class);
System.out.println(responseEntity.getStatusCode());
System.out.println(responseEntity.getBody());
return responseEntity.getBody();
}
}
'FrameWork > Spring' 카테고리의 다른 글
연관관계 (0) | 2024.06.04 |
---|---|
ComponentScan (0) | 2024.05.30 |
싱글톤 패턴과 컨테이너 (0) | 2024.05.28 |
컨테이너에 빈 등록 및 조회 (0) | 2024.05.27 |
IoC, DI 컨테이너 (0) | 2024.05.27 |