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 요청을 보내기 위해 RestTemplate의 postForObject 메서드를 사용합니다.
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 요청을 보내기 위해 RestTemplate의 exchange 메서드를 사용합니다.
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 요청을 보내기 위해 RestTemplate의 delete 메서드를 사용합니다.
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
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Java 21 새로운 기능 - Virtual Thread란 무엇인가? (0) | 2024.05.23 |
---|---|
[JAVA] WebClient 사용법 알아보기! 간단 예제 포함! (0) | 2024.05.17 |
자바 성능 튜닝 정보 알아보기! (0) | 2024.01.30 |
JPA + Hibernate 설치 및 구성 알아보기! (0) | 2021.07.02 |
[Reactive Java] Spring WebFlux에서 Error 다루기 (0) | 2021.02.23 |