- λͺ©μ°¨
- RestTemplate - Quick Start
- ν μ€νΈμ© μλ²
- μμ£Ό μ¬μ©λλ λ©μλ
- GET λ©μλ
- HEAD λ©μλ
- POST λ©μλ
- PUT
- DELETE
- λ§μΉλ©°
RestTemplateμ μ€νλ§ 3.0λΆν° μ§μνλ Spring Rest Clientμ€ νλμ΄λ€.
RestTemplateμ μ€νλ§μ ν΅ν΄ λ€λ₯Έ μλ²μ HTTP μμ²μ νκΈ°μ½λλ‘ μΆμνμμΌλμμΌλ©°, μ¬μ©μλ‘νμ¬κΈ μ½κ² HTTP μμ²μ ν μ μλλ‘ λμμ€λ€.
μ΄λ² κΈμ RestTemplateμ μ΄μ©νμ¬ HTTP μμ²μ ν΄λ³΄λ Quick-Startμ΄λ€.
κ°λ¨ν νμ CRUD μλ²λ₯Ό λμλκ³ , RestTemplateμ κΈ°λ₯λ€μ ν μ€νΈνλ€.
νμ¬λ μ€νλ§ 5.0μ WebClientκ° λμ€λ©΄μ Deprecated λμλ€.
κ·ΈλΌμλ μμ§κΉμ§λ RestTemplateμ μ΄μ©νλ νλ‘μ νΈλ λ§κΈ°μ.. μ΄λ² κΈμ μ 리νκ²λμλ€.
λ§μ½ μλ‘μ΄ νλ‘μ νΈλ₯Ό μμνλ κ²μ΄λΌλ©΄ WebClient μ¬μ©νλ κ²μ μΆμ²νλ€. (μ΄μ λ μ΄λ² κΈμ λͺ©μ κ³Ό λ€λ₯΄κΈ°μ μΆνμ μμΈν λ€λ£¬λ€.)
μ΄λ² κΈμ μ§μ RestTemplateμ μ΄μ©νμ¬ νΉμ μλ²μ HTTP μμ²μ 보λ΄λ³Έλ€.
κ·Έλ¬κΈ°μν΄μ κ°λ¨ν μλ΅μ ν΄μ€ μλ²κ° νλ νμνκΈ°μ, νμκ° κ°λ¨ν νμ CRUDλ§μ μ§μνλ μλ²λ₯Ό λ§λ€μλ€.
πββοΈ API λͺ μΈ
μμ±λ νμ μλ²μ API λͺ μΈλ μλμ κ°λ€.
- νμ μ‘°ν -
GET /users/{id} - νμ 리μ€νΈ μ‘°ν -
GET /users - νμ λ±λ‘ -
POST /users - νμ μμ -
PUT /users/{id} - νμ μμ -
DELETE /users/{id}
μμΈν μ½λλ μ¬κΈ°λ₯Ό μ°Έκ³ νλ©΄ λλ€.
μ΄λ² κΈμ ν
μ€νΈλ λͺ¨λ μ μλ²λ₯Ό λ‘컬 (localhost:8080)μ μ€νν΄λ μνμμ μ§νλλ€.
본격μ μΌλ‘ RestTemplateκ° μ§μνλ κ°κ°μ λ©μλλ₯Ό μ΄ν΄λ³΄κΈ°μ μ, μμ£Ό μ¬μ©λλ λ©μλλ₯Ό κ°λ¨ν μ 리ν΄λ³Έλ€.
getForEntity()- GET μμ²μ μ€ννκ³ HTTP μλ΅μ μν κ°κ³Ό λ°λ κ°(μ§μ ν κ°μ²΄λ‘ λ³ννμ¬)μResponseEntityμ λ£μ΄μ λ°ννλ€.getForObject()-getForEntity()μ λμΌνμ§λ§, HTTPμ μλ΅ λ°λ κ°(μ§μ ν κ°μ²΄λ‘ λ³νλ)λ§μ λ°λ‘ λ°ννλ€.exchange()- GET, POST, PUTκ³Ό κ°μ HTTP λ©μλλ₯Ό μ€ννλ©°, HTTP μλ΅μ μν κ°κ³Ό λ°λ κ°(μ§μ ν κ°μ²΄λ‘ λ³ννμ¬)μResponseEntityμ λ£μ΄μ λ°ννλ€.execute()-exchange()κ³Ό μ μ¬νμ§λ§,RequestCallbackκ³ΌResultSetExtractorλ₯Ό νλΌλ―Έν°λ‘ μ€μ ν μ μλ€.headForHeaders()- HEAD μμ²μ μ€ννλ©°, μ§μ λ URLμ λν λͺ¨λ HTTP ν€λλ₯Ό λ°ννλ€.optionsForAllow()- OPTIONS μμ²μ μ€ννλ©°, Allows ν€λλ₯Ό μ¬μ©νμ¬ μ§μ λ URLμμ νμ©λλ HTTP λ©μλλ₯Ό λ°ννλ€.delete()- μ£Όμ΄μ§ URLμ DELETE μμ²μ μ€ννλ€.put()- μ£Όμ΄μ§ URLμ PUT μμ²μ μ€ννλ€. (λ°ν κ°μ μλ€.)postForEntity()- POST μμ²μ ν΅ν΄ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νλ©°, HTTP μλ΅μ μν κ°κ³Ό μλ‘ μμ±λ λ°λ κ°(μ§μ ν κ°μ²΄λ‘ λ³ννμ¬)μResponseEntityμ λ£μ΄ λ°ννλ€.postForObject()-postForEntity()μ λμΌνμ§λ§, HTTPμ μλ΅ λ°λ κ°(μ§μ ν κ°μ²΄λ‘ λ³νλ)λ§μ λ°λ‘ λ°ννλ€.postForLocation()- POST μμ²μ ν΅ν΄ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νλ©°, μμ±λ 리μμ€μ μ£Όμλ₯Ό λ°ννλ€.
λ λ§μ λ©μλλ RestTemplate docsλ₯Ό μ°Έκ³ .
GET λ©μλλ₯Ό ν
μ€νΈνκΈ°μν΄ λ¨Όμ νμ(User)μ 보 3κ°λ₯Ό 미리 μμ±νκ³ μ§ννλ€.
@Test
void Get_getForEntity() {
// given
RestTemplate restTemplate = new RestTemplate();
Long id = 1L;
String url = LOCAL_URL + "/" + id;
// when
ResponseEntity<UserDto> response = restTemplate.getForEntity(url, UserDto.class);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody().getId()).isEqualTo(id);
}μλ΅ λ°λ κ°μ StringμΌλ‘ λ°μμ μ§μ ObjectMapperλ‘ λ³νν΄μ€λλλ€.
νμ§λ§ ν΄λΉ λΆλΆμ λ§€λ² λ°λ³΅ν΄μΌνλ λΆλΆμ΄κΈ°μ, RestTemplateμ μ£Όμ΄μ§ κ°μ²΄ νμ μΌλ‘ μλ λ³νν΄μ€λ€.
@Test
void Get_getForObject() {
// given
RestTemplate restTemplate = new RestTemplate();
Long id = 1L;
String url = LOCAL_URL + "/" + id;
// when
UserDto response = restTemplate.getForObject(url, UserDto.class);
// then
assertThat(response.getId()).isEqualTo(id);
}getForObject()λ getForEntity()μ μ μ¬νμ§λ§, ResponseEntityκ° μλ, μλ΅ κ°λ§μ λ°ννλ€.
@Test
void Get_exchange() {
// given
RestTemplate restTemplate = new RestTemplate();
Long id = 1L;
String url = LOCAL_URL + "/" + id;
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<UserDto> request =
new HttpEntity<>(headers);
// when
ResponseEntity<UserDto> response = restTemplate.exchange(url, HttpMethod.GET, request, UserDto.class);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody().getId()).isEqualTo(id);
}@Test
void Head_headForHeaders() {
// given
RestTemplate restTemplate = new RestTemplate();
String url = LOCAL_URL;
// when
HttpHeaders response = restTemplate.headForHeaders(url);
// then
assertThat(response.getContentType().includes(MediaType.APPLICATION_JSON)).isTrue();
}@Test
void Post_postForEntity() {
// given
RestTemplate restTemplate = new RestTemplate();
String url = LOCAL_URL;
String name = "test";
int age = 27;
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<UserDto> request =
new HttpEntity<>(new UserDto(null, name, age), headers);
// when
ResponseEntity<Long> response = restTemplate.postForEntity(url, request, Long.class);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isOfAnyClassIn(Long.class);
System.out.println(response.getBody()); // μλ‘ λ§λ€μ΄μ§ Userμ Entity ID
}@Test
void Post_postForObject() {
// given
RestTemplate restTemplate = new RestTemplate();
String url = LOCAL_URL;
String name = "test";
int age = 27;
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<UserDto> request =
new HttpEntity<>(new UserDto(null, name, age), headers);
// when
Long response = restTemplate.postForObject(url, request, Long.class);
// then
assertThat(response).isNotNull();
System.out.println(response); // μλ‘ λ§λ€μ΄μ§ Userμ Entity ID
}@Test
void Post_exchange() {
// given
RestTemplate restTemplate = new RestTemplate();
String url = LOCAL_URL;
String name = "test";
int age = 27;
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<UserDto> request =
new HttpEntity<>(new UserDto(null, name, age), headers);
// when
ResponseEntity<Long> response = restTemplate.exchange(url, HttpMethod.POST, request, Long.class);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
System.out.println(response); // μλ‘ λ§λ€μ΄μ§ Userμ Entity ID
}@Test
void Put_put() {
// given
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
String url = LOCAL_URL + "/" + 1L;
String updatedName = "updated_user_name";
int updatedAge = 27;
HttpEntity<UserDto> request =
new HttpEntity<>(new UserDto(null, updatedName, updatedAge), headers);
// when
restTemplate.put(url, request);
}@Test
void Put_Put() {
// given
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Accept", MediaType.APPLICATION_JSON_VALUE);
String updatedName = "updated_user_name";
int updatedAge = 27;
HttpEntity<UserDto> request =
new HttpEntity<>(new UserDto(null, updatedName, updatedAge), headers);
// when
ResponseEntity<UserDto> response = restTemplate.exchange(LOCAL_URL + "/" + 1L, HttpMethod.PUT, request, UserDto.class);
// then
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody().getName()).isEqualTo(updatedName);
assertThat(response.getBody().getAge()).isEqualTo(updatedAge);
}@Test
void DELETE() {
// given
RestTemplate restTemplate = new RestTemplate();
String url = LOCAL_URL + "/" + 1L;
restTemplate.delete(url);
}μ΄λ² κΈμ κ°λ¨ν RestTemplateμ μ΄λ»κ² μ¬μ©νλμ§μ λν Quick-Startμ λν΄μ μμ보μλ€.
λ€μ κΈμμ RestTemplateμ λμ μ리μ μ€μ νλ λ°©λ²μ λν΄μ λ€λ£¬λ€.