스프링 RestTemplate 정리(요청 함)

김영한·2021년 1월 26일
11

Spring

목록 보기
5/5

출처


📢 REST 서비스의 호출 방법

  • RestTemplate
    • Spring 3부터 지원, REST API 호출이후 응답을 받을 때까지 기다리는 동기 방식
  • AsyncRestTemplate
    • Spring 4에 추가된 비동기 RestTemplate이다.
  • WebClient
    • Spring 5에 추가된 논블럭, 리엑티브 웹 클라이언트로 동기, 비동기 방식을 지원한다.

⭐ RestTemplate 메서드

📢 RestTemplate이란?

  • spring 3.0 부터 지원한다.
  • 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿
  • HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다.(json, xml을 쉽게 응답 받음)

📢 RestTemplate의 동작 원리

  • HttpClient는 HTTP를 사용하여 통신하는 범용 라이브러리
  • RestTemplate는 HttpClient를 추상화(HttpEntity의 json, xml 등)해서 제공
  1. 어플리케이션이 RestTemplate를 생성하고, URI, HTTP 메소드 등의 헤더를 담아 요청

  2. RestTemplate는 HttpMessageConverter를 사용하여 requestEntity를 요청 메세지로 변환

  3. RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보냄

  4. ClientHttpRequest 는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신

  5. RestTemplate 는 ResponseErrorHandler 로 오류를 확인하고 있다면 처리로직을 태움

  6. ResponseErrorHandler 는 오류가 있다면 ClientHttpResponse 에서 응답데이터를 가져와서 처리

  7. RestTemplate 는 HttpMessageConverter 를 이용해서 응답메세지를 java object(Class responseType) 로 변환

  8. 어플리케이션에 반환

@Component
public class sendData {
    private static RestTemplate restTemplate;

    public static ResponseEntity<SubmitData> sendEngine() {
        int SubNum = 123;
        int Pnum = 1;
        Object Pcode = "코드";
        SubmitData requestDto = SubmitData.builder()
                .SubNum(SubNum)
                .Pnum(Pnum)
                .Pcode(Pcode)
                .build();

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        HttpEntity<SubmitData> entity = new HttpEntity<>(requestDto, headers);

        String url = "http://localhost:8080/send";
        
        return restTemplate.exchange(url, HttpMethod.POST, entity, SubmitData.class);
    }
}

http://localhost:8080/send로 요청

0개의 댓글