RestTemplate 기본 사용법

greenTea·2023년 3월 30일

RestTemplate 기본 사용법

spring-boot-starter-web 라이브러리를 추가해야 RestTemplate을 사용할 수 있다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

RestTemplate을 new로 만들어서 사용해도 되고 아래처럼 @Bean으로 등록해서 사용해도 된다. 아래는 Builder를 통해 만든 방법이다.

@Configuration
public class RestTemplateConfig {
 
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
 
}

HTTP 요청

  • getForObject: GET 요청을 보내고 응답을 받아오는 메소드로 요청 결과를 Java 객체로 변환하여 반환
  • getForEntity: GET 요청을 보내고 응답을 받아오는 메소드로 요청 결과를 ResponseEntity 객체로 반환
  • postForObject: POST 요청을 보내고 응답을 받아오는 메소드로 요청 결과를 Java 객체로 변환하여 반환
  • postForEntity: POST 요청을 보내고 응답을 받아오는 메소드로 요청 결과를 ResponseEntity 객체로 반환
  • put: PUT 요청을 보내고 응답을 받아오는 메소드
  • delete: DELETE 요청을 보내고 응답을 받아오는 메소드

Get 요청

public class MyService {
 
    @Autowired
    private RestTemplate restTemplate;
 
    public MyData getData(String id) {
        String url = "http://example.com/api/data/{id}";
        return restTemplate.getForObject(url, MyData.class, id);
    }
 
}

Post 요청

public class MyService {
 
    @Autowired
    private RestTemplate restTemplate;
 
    public MyData createData(MyData data) {
        String url = "http://example.com/api/data";
        return restTemplate.postForObject(url, data, MyData.class);
    }
 
}

요청 헤더의 설정

HTTP 요청 헤더는 HttpHeaders 클래스를 사용하여 설정할 수 있다. HttpHeaders 객체를 생성한 후, set 메서드를 사용하여 요청 헤더를 설정하여 내가 원하는 헤더를 만들어 넣을 수 있다.

public class MyService {
 
    @Autowired
    private RestTemplate restTemplate;
 
    public MyData getData(String id) {
        String url = "http://example.com/api/data/{id}";
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", "Bearer " + getToken());
        HttpEntity<?> entity = new HttpEntity<>(headers);
        ResponseEntity<MyData> response = restTemplate.exchange(url, HttpMethod.GET, entity, MyData.class, id);
        return response.getBody();
    }
 
}

요청 바디 설정

헤더와 같이 바디도 설정할 수 있다.ㅣ HttpEntity를 통해 헤더와 같이 바디도 같이 설정 해주면 된다.

public class MyService {
 
    @Autowired
    private RestTemplate restTemplate;
 
    public MyData createData(MyData data) {
        String url = "http://example.com/api/data";
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", "Bearer " + getToken());
        HttpEntity<MyData> entity = new HttpEntity<>(data, headers);
        ResponseEntity<MyData> response = restTemplate.exchange(url, HttpMethod.POST, entity, MyData.class);
        return response.getBody();
    }
 
}

spring에서는 restTemplate보다는 webclient를 사용하라고 권장하고 있다. 아직 deprecated 되지는 않았지만 다다음 버전때는 deprecate 될 수 있으니 미리 webclient를 공부해보는 것도 나쁘지 않을 것 같다.

profile
greenTea입니다.

0개의 댓글