Spring

RestTemplate( org.springframework.web.client.RestTemplate.class )

doriver 2023. 11. 15. 11:13

org.springframework.web.client.RestTemplate.class [ spring-web-5.3.20.jar ]

HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 원격 서버에 요청을 보내고, 응답을 받을 수 있습니다.  
또한, 헤더 설정, 요청 매개변수 전달, 응답의 처리 등 다양한 기능을 제공합니다.

 

@Override
public <T> ResponseEntity<T> exchange( URI url, HttpMethod method, @Nullable HttpEntity<?> requestEntity
										, ParameterizedTypeReference<T> responseType) throws RestClientException { ~ }
// url: 요청을 보낼 URL
// method: HTTP 메서드 (GET, POST, PUT, DELETE 등)
// requestEntity: 요청 시 사용할 HttpEntity 객체. 이를 통해 헤더, 요청 본문 등을 설정할 수 있습니다.
// responseType: 응답을 어떤 형태로 받을지를 나타내는 클래스

 

exchange 메서드는 ResponseEntity<T>를 반환한다. 
이 객체는 HTTP 응답의 상태 코드, 헤더 및 응답 본문을 포함하고 있다.

이를 통해 세부적인 응답 정보를 확인할 수 있습니다.

 

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class MyRestClient {

    public static void main(String[] args) {
        // RestTemplate 인스턴스 생성
        RestTemplate restTemplate = new RestTemplate();

        // 서버의 API 엔드포인트 URL
        String apiUrl = "https://api.example.com/data";

        // HTTP 요청 시 사용할 헤더 설정
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", "Bearer yourAccessToken");
        HttpEntity<?> requestEntity = new HttpEntity<>(headers);

        // exchange 메서드를 사용하여 GET 요청 보내기
        ResponseEntity<String> responseEntity = restTemplate.exchange(apiUrl, HttpMethod.GET, requestEntity, String.class);

        // 응답 정보 확인
        int statusCode = responseEntity.getStatusCodeValue();
        HttpHeaders responseHeaders = responseEntity.getHeaders();
        String responseBody = responseEntity.getBody();

        System.out.println("Status Code: " + statusCode);
        System.out.println("Response Headers: " + responseHeaders);
        System.out.println("Response Body: " + responseBody);
    }
}

java.net.URI.class [ java.base( C: / dfp-project / jdk-17 / lib / jrt-fs.jar ) ]

Uniform Resource Identifier(URI)를 나타내기 위한 Java의 클래스. 
( URI는 인터넷에서 리소스를 고유하게 식별하기 위한 표준화된 방법을 제공하는 문자열 )
java.net.URI 클래스는 URI를 파싱하고, 생성하고, 조작하는 데 사용됩니다.

 

org.springframework.http.HttpMethod.class [ spring-web-5.3.20.jar ]

HTTP 요청 메서드를 나타내는 열거형(Enumeration). 이 열거형은 HTTP 프로토콜에서 정의된 여러 메서드를 나타낸다

org.springframework.http.HttpHeaders.class [ spring-web-5.3.20.jar ]

HTTP 헤더를 나타내는 클래스. 
HTTP 요청이나 응답의 헤더를 효과적으로 다룰 수 있도록 도와주며, 다양한 헤더 정보를 쉽게 추가하고 읽을 수 있는 메서드를 제공

org.springframework.http.HttpEntity.class [ spring-web-5.3.20.jar ] 

HTTP 요청 또는 응답의 엔터티(body)를 표현하는 데 사용됨
body 데이터를 캡슐화하고 조작할 수 있는 기능을 제공

org.springframework.http.ResponseEntity.class [ spring-web-5.3.20.jar ] 

HTTP 응답을 나타내는 클래스입니다. 이 클래스는 HTTP 응답 상태 코드, 헤더, 본문 등을 포함하는 풍부한 응답 정보를 제공합니다. 
주로 컨트롤러 메서드의 반환 타입으로 사용되며, 클라이언트에게 전송되는 HTTP 응답을 정의하는 데 유용.

org.springframework.core.ParameterizedTypeReference.class [ spring-core-5.3.20.jar ]

주로 RestTemplate이나 ResponseEntity 같은 클래스에서 HTTP 응답을 처리할 때, 제네릭 타입 정보를 유지하고 이를 활용하기 위해 이 클래스를 사용
일반적으로 Java에서는 제네릭 타입 정보는 런타임에 소거되기 때문에
컴파일 타임에는 제네릭 타입을 사용할 수 있지만, 런타임에는 실제 타입 정보가 손실됩니다. 
이로 인해 제네릭 타입을 사용하는 메서드나 클래스에서 실제 타입 정보를 얻는 것이 어렵습니다.