RestTemplate란?
spring에서 지원하는 객체로 간편하게 REST 방식 API를 호출할수있는 SPRING 내장클래스이다.
SPRING 3.0 부터 지원되었고, json, xml 응답을 모두 받을수있다.
REST API 서비스를 요청후 응답받을수있도록 설계되었으며
HTTP 프로토콜의 메소드(GET,POST,DELET,PUT)들에 적합한 여러 메소드를 제공한다.
RestTemplate 동작원리
1. 애플리케이션 내부에서 REST API를 요청하기위해 RestTemplate의 메서드를 호출한다.
2. RestTemplate는 MessageConverter을 이용해 java object를 request body에 담을 message(JSON etc.)으로 변환한다.
메세지 형태는 상황에 따라 다름
3. ClientHttpRequestFactory에서 ClientHttpRequest를 받아와 요청을 전달한다.
4. 실질적으로 ClientHttpRequest가 HTTP 통신으로 요청을 수행한다.
5. RestTemplate가 에러 핸들링을 한다
6. ClientHttpResponse에서 응답 데이터를 가져와 오류가 있으면 처리한다.
7. MessageConverter를 이용해 response body의 message를 java object로 변환한다.
8. 결과를 애플리케이션에 돌려준다.
지원메서드
출처 : https://dejavuhyo.github.io/posts/spring-resttemplate/
GET요청과 POST요청 예제
GET 요청 예제
RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/resource";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
String responseBody = response.getBody();
이 예제에서는 RestTemplate을 생성한 후,
GET 요청을 보낼 URL을 지정하고,
getForEntity() 메서드를 호출하여 요청을 보냅니다.
이 메서드는 ResponseEntity 객체를 반환하며,
이 객체는 응답 바디와 HTTP 상태 코드 등을 포함합니다.
마지막으로, getBody() 메서드를 호출하여 응답 바디를 가져옵니다.
POST 요청 예제
RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/api/resource";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Map<String, String> requestBody = new HashMap<>();
requestBody.put("key1", "value1");
requestBody.put("key2", "value2");
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
String responseBody = response.getBody();
이 예제에서는 RestTemplate을 생성한 후,
POST 요청을 보낼 URL을 지정하고,
HttpHeaders 객체를 생성하여 요청 헤더를 설정합니다.
그리고 요청 바디를 포함하는 HttpEntity 객체를 생성한 후,
postForEntity() 메서드를 호출하여 요청을 보냅니다. 이 메서드는 ResponseEntity 객체를 반환하며,
이 객체는 응답 바디와 HTTP 상태 코드 등을 포함합니다.
마지막으로, getBody() 메서드를 호출하여 응답 바디를 가져옵니다.
위의 예제에서는 JSON 형식의 요청 바디를 보내는 예제이지만,
다른 형식의 요청 바디를 보낼 때에도 HttpEntity 객체를 적절하게 생성하면 됩니다.
'STUDY > SpringLegacy' 카테고리의 다른 글
[Spring] ModelAndView 사용방법 (0) | 2023.05.24 |
---|---|
[Spring] SqlSession, SqlSessionDaoSupport (0) | 2023.05.24 |
[Spring] @RequestMapping 어노테이션 (0) | 2023.04.19 |
[Spring] @RequestBody @ResponseBody 어노테이션과 @RestController (0) | 2023.04.19 |
[Spring] RestTemplate 한글 깨짐 (0) | 2023.04.18 |