이전부터 RestTemplate를 아닌 새로운 방법을 사용해야겠다고 인지하고 있었는데, 새 프로젝트를 진행하면서 RestClient를 사용했다. 그 과정에서 여러 글을 참고했는데, 해당 포스팅은 그 글들을 모아 정리한 내용이다.
그래서 별다른 추가 내용을 적지 않아, 원 글들이 진짜 내용이라 생각해 참고를 먼저 작성했다.
뭐? RestTemplate가 Deprecated라고?
RestTemplate Deprecated 루머 해결
Spring 6.1 RestClient 공식문서
[Spring] Spring Boot3.2에 새롭게 추가될 RestClient
Api 보낼 때 RestTemplate, WebClient.. 그리고 RestClient?
implementation 'org.springframework.boot:spring-boot-starter-webflux'
WebClient가 webflux를 사용해야 한다는 문제에서 기인하여 만들어진 서블릿 기반의 WebClient로 보면 됨
Spring 6.1, Spring Boot 3.2부터 사용 가능함
RestClient restClient1 = RestClient.create();
RestClient restClient2 = RestClient.create(restTemplate);
RestClient restClient3 = RestClient.builder()
.baseUrl("<https://example.com>")
.build();
String result = restClient.get()
.uri("https://example.com")
.retrieve()
.body(String.class);
ResponseEntity result = restClient.get()
.uri("<https://example.com>")
.retrieve()
.toEntity(String.class);
Pet pet = restClient.get()
.uri("https://example.com/pets/{id}", id)
.accept(APPLICATION_JSON)
.retrieve()
.body(Pet.class);
ResponseEntity<Void> response = restClient.post()
.uri("https://example.com/pets/new")
.contentType(APPLICATION_JSON)
.body(pet)
.retrieve()
.toBodilessEntity();
String result = restClient.get()
.uri("https://example.com/this-url-does-not-exist")
.retrieve()
.onStatus(HttpStatusCode::is4xxClientError, (request, response) -> {
throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders())
})
.body(String.class);
Pet result = restClient.get()
.uri("<https://example.com/pets/{id}>", id)
.accept(APPLICATION_JSON)
.exchange((request, response) -> {
if (response.getStatusCode().is4xxClientError()) {
throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders());
}
else {
Pet pet = convertResponse(response);
return pet;
}
});