ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. RestTemplate 호출을 해보자
    스프링개발자/201 - 일반 2020. 7. 16. 06:42

    [요약]

    내 어플리케이션이 다른 어플리케이션을 호출해야 할 때가 있다.

    가장 기본적인 호출방법인 RestTemplate을 구현해보자.


    1. 다른 어플리케이션을 하나 만들자

    이전과 마찬가지로 Spring Initializr를 이용한다. Web dependency 정도만 추가했다.

    이름은 데모 어플리케이션. 또한 서버포트를 다르게 설정해준다; server.port=8000

    로컬환경에서는 호스트가 localhost라서 여러개의 어플을 띄울경우, 포트번호를 달리 해야한다.

    클라우드 환경에서는 어플리케이션마다 고유한 주소가 부여되므로, 포트번호를 따로 설정하지 않아도 괜찮다.

    새로 만든 어플리케이션에서 컨트롤러 하나를 만들고, 어플리케이션을 실행해서 포트8000번에 올려보자

     

    2. 메인 어플리케이션에서 restTemplate endpoint를 만들자

    RestTemplate restTemplate = new RestTemplate(); 객체를 하나 만든다

    getForEntity 메소드에는 다음의 두가지 정보만 제공하면 된다

    1. 호출 url

    2. Response class type

     

    3. 두 어플리케이션이 communicate 하는지 확인하자

    어플리케이션을 모두 띄우고

    localhost:8080/demo/call를 실행시킨다. 다음 결과가 나온다;

    restTemplate은 synchronous call이다; 추가 내용이 궁금하면, 해당 javadoc (org.springframework.web.client.RestTemplate)을 보자.


    [TroubleShooting]

    1. org.Springframework.http 의존성을 추가하자.

    2. postForEntity를 하면 안된다. 다른 어플리케이션을 부르는거니까 post인가 했다가 이걸로 해봤다가 익셉션 났다

    다음의 로그는 post request가 들어왔었는데, 지원하지 않는다는 메세지이다.

    3. postForObject와 postForEntity의 차이점은 다음과 같다;

    Compared to postForObject(), postForEntity() returns the response 
    as a ResponseEntity object. Other than that, both methods do the same job. 
    new HttpEntity<String>(personJsonObject. toString(), headers);
    
    해석하자면;
    
    postForEntity의 리턴타입은 ResponseEntity 오브젝트 라는것;
    이외 내부 작동 방식은 똑같다.
    postForObject() + httpHeader + status = postForEntity
    
    자세한 내용은 org.springframework.http.ResponseEntity를 참고

     

Designed by Tistory.