RestTemplate
- HTTP 통신을 간편하게 처리할 수 있는 클래스
- RESTful 웹 서비스와 통신하기 위해 사용되며, 간단한 API 호출부터 복잡한 요청과 응답까지 처리할 수 있음
RestTemplate의 기능
- HTTP 요청 보내기 : RestTemplate을 사용하여 GET, POST, PUT, DELETE 등의 다양한 HTTP 메서드를 사용하여 서버에 요청을 보낼 수 있다.
- HTTP 응답 받기 : RestTemplate을 사용하여 서버로부터 받은 HTTP 응답을 처리할 수 있습니다. JSON, XML 등의 응답 데이터를 Java 객체로 변환하는 기능을 제공
- HTTP 요청 파라미터와 헤더 설정: RestTemplate을 사용하여 요청에 필요한 파라미터와 헤더를 설정할 수 있다.
- 에러 핸들링: RestTemplate을 사용하여 서버로부터 받은 HTTP 에러 응답을 처리하고 예외를 발생시킬 수 있다.
- 인터셉터 설정: RestTemplate에 인터셉터를 등록하여 요청과 응답을 가로채고 처리할 수 있다
RestTemplate 통신
- 예제는 소셜 로그인의 일부로 받아온 ACCESSTOKEN을 이용하여 USERINFO를 얻어오기 위해 사용된 예제입니다
public String requestAccessToken(OAuthLoginParams params) {
String url = authUrl + "/oauth/token";
HttpHeaders httpHeaders = new HttpHeaders(); // 헤더 설정
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> body = params.makeBody(); // 바디 설정
body.add("grant_type", GRANT_TYPE);
body.add("client_id", clientId);
HttpEntity<?> request = new HttpEntity<>(body, httpHeaders); // Http 데이터를 담음
KakaoTokens response = restTemplate.postForObject(url, request, KakaoTokens.class); //요청 후 테이터 저장
assert response != null;
return response.getAccessToken();
}
HttpEntity
- RestTemplate을 사용하여 HTTP 요청을 보낼 떄 헤더와 바디를 포함하여 보내함 이를 지원하는 Entity가 HttpEntity이다
- HttpEntity의 파라미터는 2가지
| 위의 코드에서 HttpHeaders를 사용하여 Authorization 헤더와 Content-Type 헤더를 설정하고, MultiValueMap을 사용하여 바디 데이터를 설정하고 있다. 이렇게 설정된 HttpEntity 객체는 RestTemplate의 postForObject 메서드에 전달되어 서버로 HTTP POST 요청이 보내지게 된다.