TIL 2023-11-09 RestTemplate

장규빈·2023년 11월 9일

TIL

목록 보기
21/59
post-thumbnail

RestTemplate란

서버에서 다른서버로 요청을 보내는 기능!

private final RestTemplate restTemplate;

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

RestTemplate를 사용하기 위해서는 사용하는 위치에 RestTemplate를 주입받아야한다.

Get

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();
}

fromUriString에 url의 main주소를 입력
path에 나머지 주소들 입력
queryParam에 ?뒤에 들어갈 파라미터들 입력
restTemplate.getForEntity에 url과 response받을 객체타입을 넣어준다.
responseEntity.getBody()로 결과값을 받을수 있다.

Post

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();
}

restTemplate.postForEntity에 url,body에 담아 보낼 객체,response받을 객체타입을 넣어준다.

Exchange

Header에 특정 정보를 같이 전달 하고 싶을때 사용한다.

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());
}

restTemplate.exchange안에 header의 정보와 body가 담긴 객체와 response받을 타입을 넣어준다.

profile
나다운사람

0개의 댓글