[Spring] RestTemplate 요청

Jiwoo·2024년 5월 28일
0

Spring

목록 보기
8/19

RestTemplate의 Get 요청

📌 Client 입장 서버

  • 요청받은 검색어를 Query String 방식으로 Server 입장의 서버로 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();
}

📌 Server 입장 서버

  • itemList 조회해 요청받은 검색어에 맞는 Item 반환
public Item getCallObject(String query) {
    for (Item item : itemList) {
        if(item.getTitle().equals(query)) {
            return item;
        }
    }
    return null;
}

RestTemplate의 Post 요청

📌 Client 입장 서버

  • 요청 받은 검색어 Query String 방식으로 Server 입장의 서버로 RestTemplate 사용해 요청
public ItemDto postCall(String query) {
    // 요청 URL 만들기
    // {query} 안의 값 동적으로 처리 가능
    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();
}

📌 Server 입장 서버

public Item postCall(String query, UserRequestDto userRequestDto) {
    System.out.println("userRequestDto.getUsername() = " + userRequestDto.getUsername());
    System.out.println("userRequestDto.getPassword() = " + userRequestDto.getPassword());

    return getCallObject(query);
}
  • itemList 조회하여 요청받은 검색어에 맞는 item 반환
  • 전달받은 HTTP Body의 User 데이터 확인

RestTemplate의 exchange

RestTemplate으로 요청 보낼 때 Header에 특정 정보 같이 전달하고 싶다면?

📌 Client 입장 서버

public List<ItemDto> exchangeCall(String token) {
    // 요청 URL 만들기
    URI uri = UriComponentsBuilder
            .fromUriString("http://localhost:7070")
            .path("/api/server/exchange-call")
            .encode()
            .build()
            .toUri();
    log.info("uri = " + uri);

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

    RequestEntity<User> requestEntity = RequestEntity
            .post(uri)
            .header("X-Authorization", token)
            .body(user);

    ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);

    return fromJSONtoItems(responseEntity.getBody());
}
  • exchange 메서드의 첫 번째 파라미터에 RequestEntity 객체 만들어 전달해주면 uri, header, body 의 정보 한번에 전달 가능

📌 Server 입장 서버

public ItemResponseDto exchangeCall(String token, UserRequestDto requestDto) {
    System.out.println("token = " + token);
    System.out.println("requestDto.getUsername() = " + requestDto.getUsername());
    System.out.println("requestDto.getPassword() = " + requestDto.getPassword());

    return getCallList();
}
  • 전달된 header와 body의 정보 확인 가능

0개의 댓글