230710_ RestTemplate

hoy_·2023년 7월 10일
0

Today, I Learned

목록 보기
28/36

1. 오늘의 일정

  1. 숙련 주차 강의 복습 (~2-15)

  2. lv2 과제 코드리뷰




2. 배운 내용


RestTemplate이란?

Spring에서 지원하는 객체로 간편하게 Rest 방식 API를 호출할 수 있는 Spring 내장 클래스이다.

Rest API 서비스를 요청 후 응답받을 수 있도록 설계되어 있으며 HTTP 프로토콜의 메서드(ex. GET, POST, DELETE, PUT)들에 적합한 여러 메소드를 제공한다.

⭐ RestTemplate 메서드


RestTemplate의 Get 요청

RestTemplate을 주입

private final RestTemplate restTemplate;

// RestTemplateBuilder의 build()를 사용하여 RestTemplate 생성
public RestTemplateService(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}

Query String 방식으로 RestTemplate를 사용하여 요청

public ItemDto getCallObject(String query) {
    // 요청 URL 만들기
    URI uri = UriComponentsBuilder
            .fromUriString("http://localhost:7070")
            .path("/api/server/get-call-obj")
            .queryParam("query", query)
            .encode()
            .build()
            .toUri();
    log.info("uri = " + uri);

    ResponseEntity<ItemDto> responseEntity = restTemplate.getForEntity(uri, ItemDto.class);

    log.info("statusCode = " + responseEntity.getStatusCode());

    return responseEntity.getBody();
}

RestTemplate의 Post 요청

Query String 방식으로 RestTemplate를 사용하여 요청

public ItemDto postCall(String query) {
    // 요청 URL 만들기
    URI uri = UriComponentsBuilder
            .fromUriString("http://localhost:7070")
            .path("/api/server/post-call/{query}")
            .encode()
            .build()
            .expand(query)
            .toUri();
    log.info("uri = " + uri);

    User user = new User("Robbie", "1234");

    ResponseEntity<ItemDto> responseEntity = restTemplate.postForEntity(uri, user, ItemDto.class);

    log.info("statusCode = " + responseEntity.getStatusCode());

    return responseEntity.getBody();
}
  • UriComponentsBuilderexpand를 사용하여 {query} 안의 값을 동적으로 처리할 수 있다.
  • RestTemplatepostForEntityPost 방식으로 해당 URI의 서버에 요청을 진행
  • 첫 번째 파라미터에는 URI, 두 번째 파라미터에는 HTTP Body에 넣어줄 데이터를 넣는다.
  • Java 객체를 두 번째 파라미터에 넣으면 자동으로 JSON 형태로 변환
  • 세 번째 파라미터에는 전달 받은 데이터와 매핑하여 인스턴스화할 클래스의 타입을 넘김



profile
배우는 사람

0개의 댓글