Spring Template - RestTemplate

RestTemplate

  • HTTP 통신을 간편하게 처리할 수 있는 클래스
  • RESTful 웹 서비스와 통신하기 위해 사용되며, 간단한 API 호출부터 복잡한 요청과 응답까지 처리할 수 있음

RestTemplate의 기능

  1. HTTP 요청 보내기 : RestTemplate을 사용하여 GET, POST, PUT, DELETE 등의 다양한 HTTP 메서드를 사용하여 서버에 요청을 보낼 수 있다.
  2. HTTP 응답 받기 : RestTemplate을 사용하여 서버로부터 받은 HTTP 응답을 처리할 수 있습니다. JSON, XML 등의 응답 데이터를 Java 객체로 변환하는 기능을 제공
  3. HTTP 요청 파라미터와 헤더 설정: RestTemplate을 사용하여 요청에 필요한 파라미터와 헤더를 설정할 수 있다.
  4. 에러 핸들링: RestTemplate을 사용하여 서버로부터 받은 HTTP 에러 응답을 처리하고 예외를 발생시킬 수 있다.
  5. 인터셉터 설정: 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가지
    • body : HTTP 요청의 바디에 해당하는 데이터를 담는다. 주로 JSON, XML 등의 데이터를 포함한다 
    • MultiValueMap, Map, 또는 다른 클래스를 사용하여 구성할 수 있다.
    • headers : HTTP 요청의 헤더에 해당하는 데이터를 포함한다. 주로 Content-Type, Authorization 등의 헤더 정보를 포함한다.
         HttpHeaders 클래스를 사용하여 구성할 수 있습니다.
    | 위의 코드에서 HttpHeaders를 사용하여 Authorization 헤더와 Content-Type 헤더를 설정하고, MultiValueMap을 사용하여 바디 데이터를 설정하고 있다. 이렇게 설정된 HttpEntity 객체는 RestTemplate의 postForObject 메서드에 전달되어 서버로 HTTP POST 요청이 보내지게 된다.

'JAVA > Spring' 카테고리의 다른 글

[스프링 학습] 1. 오브젝트와 IoC  (0) 2023.10.23
Spring Template이란?  (0) 2023.07.23
JWT Token  (0) 2023.07.23
HttpServletRequest와 @RequestBody  (0) 2023.07.23
01. Spring - DI(Dependency Injection)  (0) 2023.07.13