본문 바로가기

JAVA

[JAVA] RestTemplate 개념 알아보기! 간단 예제 포함!

728x90
반응형

 

RestTemplate은 스프링 프레임워크에서 제공하는 HTTP 클라이언트 템플릿 클래스입니다. RESTful API를 소비하는 데 유용한 도구로서, 다음과 같은 다양한 기능을 제공합니다.

구분 내용
간편한 HTTP 요청 및 응답 처리 RestTemplate을 사용하면 HTTP 요청 헤더, 본문 및 URL을 쉽게 설정하고, 응답 상태 코드 및 본문을 추출할 수 있습니다.
자동 메시지 변환 RestTemplate은 기본적으로 JSON, XML, 바이너리 데이터 등 다양한 형식의 메시지를 자동으로 변환합니다.
인증 지원 기본 인증, 다이제스트 인증, OAuth 등 다양한 인증 방식을 지원합니다.
편리한 예외 처리 RestTemplate은 HTTP 오류를 처리하고 예외를 발생시켜 응용 프로그램 코드를 간결하게 유지하는 데 도움이 됩니다.

RestTemplate 사용 예제

RestTemplate 빈 등록

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

다음은 RestTemplate을 사용하여 간단한 GET 요청을 보내는 예제입니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public String getExample() {
        String url = "https://jsonplaceholder.typicode.com/posts/1";
        return restTemplate.getForObject(url, String.class);
    }
}

POST 요청을 보내기 위해 RestTemplatepostForObject 메서드를 사용합니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public String createPost() {
        String url = "https://jsonplaceholder.typicode.com/posts";

        HttpHeaders headers = new HttpHeaders();
        headers.set("Content-Type", "application/json");

        String requestBody = "{ \"title\": \"foo\", \"body\": \"bar\", \"userId\": 1 }";
        HttpEntity<String> request = new HttpEntity<>(requestBody, headers);

        return restTemplate.postForObject(url, request, String.class);
    }
}

PUT 요청을 보내기 위해 RestTemplateexchange 메서드를 사용합니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public String updatePost() {
        String url = "https://jsonplaceholder.typicode.com/posts/1";

        HttpHeaders headers = new HttpHeaders();
        headers.set("Content-Type", "application/json");

        String requestBody = "{ \"id\": 1, \"title\": \"foo\", \"body\": \"bar\", \"userId\": 1 }";
        HttpEntity<String> request = new HttpEntity<>(requestBody, headers);

        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.PUT, request, String.class);
        return response.getBody();
    }
}

DELETE 요청을 보내기 위해 RestTemplatedelete 메서드를 사용합니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public void deletePost() {
        String url = "https://jsonplaceholder.typicode.com/posts/1";
        restTemplate.delete(url);
    }
}

RestTemplate을 사용하면서 발생할 수 있는 예외를 처리하는 방법입니다.

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.ResourceAccessException;

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    public String getExample() {
        String url = "https://jsonplaceholder.typicode.com/posts/1";
        try {
            return restTemplate.getForObject(url, String.class);
        } catch (HttpClientErrorException e) {
            // 4xx errors
            return "Client error: " + e.getStatusCode();
        } catch (ResourceAccessException e) {
            // Network issues
            return "Resource access error: " + e.getMessage();
        } catch (Exception e) {
            // General error handling
            return "Error: " + e.getMessage();
        }
    }
}
728x90
반응형