RestTemplate이란?
- 스프링에서 제공하는 HTTP통신 기능을 쉽게 사용할 수 있게 해주는 템플릿
- 동기 방식으로 처리됨(비동기 방식을 원하면 AsyncRestTemplate 사용)
- 여러가지 메소드 제공
RestTemplate이 제공하는 여러 메소드
Method |
설명 |
getForObject |
GET 형식으로 요청하여 객체로 결과 반환 받음 |
getForEntity |
GET 형식으로 요청하여 ResponseEntity로 결과 반환 받음 |
postForObject |
POST 형식으로 요청하여 객체로 결과 반환 받음 |
postForEntity |
POST 형식으로 요청하여 ResponseEntity로 결과 반환 받음 |
delete |
DELETE 형식으로 요청 |
put |
PUT 형식으로 요청 |
patchForObject |
PATCH 형식으로 요청 |
exchange |
HTTP 헤더를 생성하여 추가할 수 있고 어떤 형식에서도 사용할 수 있음(어떠한 HTTP 형식이든 가능) |
ReqeustParam에 값 넣고 요청 보내기
public UserDto getUser() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/get-user")
.queryParam("userId", 1) // RequestParam값 지정
.encode()
.build()
.toUri();
// RestTemplate 생성
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<UserDto> responseEntity = restTemplate.getForEntity(uri, UserDto.class);
// body type 지정
LOGGER.info("status code: {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
return responseEntity.getBody();
}
RequestBody에 값 넣고 요청 보내기
public boolean postUser() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/save-user")
.encode()
.build()
.toUri();
UserDto userDto = UserDto.builder()
.name("James")
.age(10)
.email("j@gmail.com").build(); // 객체 생성
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Boolean> responseEntity = restTemplate.postForEntity(uri, userDto, Boolean.class);
// RequestBody에 값 넣기
LOGGER.info("status code: {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
return responseEntity.getBody();
}
Header에 값 넣고 요청 보내기
public boolean postWithHeader() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8080")
.path("/save-user")
.encode()
.build()
.toUri();
UserDto userDto = UserDto.builder()
.name("James")
.age(10)
.email("j@gmail.com").build();
RequestEntity<UserDto> requestEntity = RequestEntity.post(uri)
.header("header", "header_value") // header에 값 넣기
.body(userDto); // body에 값 넣기
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<Boolean> responseEntity = restTemplate.exchange(requestEntity, Boolean.class);
LOGGER.info("status code: {}", responseEntity.getStatusCode());
LOGGER.info("body: {}", responseEntity.getBody());
LOGGER.info("header: {}", responseEntity.getHeaders());
return responseEntity.getBody();
}