스프링에서 제공하는 HTTP 통신 기능을 쉽게 사용할 수 있게 설계되어 있는 템플릿입니다.
HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킬수 있으며 동기 방식으로 처리됩니다.
REST 서비스를 호출하도록 설계되어 HTTP 프로토콜의 메소드에 맞게 여러 메소드를 제공합니다.
+ 스프링 5.0 이후 부터는 WebClient 를 사용하기를 권장합니다.
https://tecoble.techcourse.co.kr/post/2021-07-25-resttemplate-webclient/
기본적인 예제를 작성해보겠습니다.
에제를 작성하는 환경은 port가 다른 환경인 2가지 서버가 필요합니다.
8080 과 8888 포트를 사용했습니다.
RestTemplate 설정
RestTemplate 은 org.springframework.web.client 패키지 안에 있으므로, gradle 에 web 이 추가되어 있다면 바로 사용할 수 있습니다.
1. String 기본
UriComponentBuilder 를 사용하며, HTTP 통신을 할 uri 와 path 를 작성합니다.
new RestTemplate() 를 사용하며, 통신할 URI 가 get 요청이기 때문에 getForEntity를 사용합니다.
public String getName() {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8888")
.path("/api/server/basic")
.encode()
.build()
.toUri();
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.getForEntity(uri, String.class);
log.info("responseEntity.getStatusCode = {}", responseEntity.getStatusCode());
log.info("responseEntity.getStatusCode = {}", responseEntity.getBody());
return responseEntity.getBody();
}
2. DTO 관련
UriCompnentBuilder 를 사용해서 통신할 HTTP 정보를 작성합니다.
queryParam을 사용해서 값을 지정해줍니다.
@Data
public class MemberDto {
private String name;
private String email;
private String organization;
}
public ResponseEntity<MemberTestDto> postDto(MemberTestDto memberTestDto) {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8888")
.path("/api/server/dto")
.queryParam("name", memberTestDto.getName())
.queryParam("email", memberTestDto.getEmail())
.queryParam("organization", memberTestDto.getOrganization())
.encode()
.build()
.toUri();
MemberTestDto dto = new MemberTestDto();
dto.setName(memberTestDto.getName());
dto.setEmail(memberTestDto.getEmail());
dto.setOrganization(memberTestDto.getOrganization());
log.info("name" + memberTestDto.getName());
log.info("email" + memberTestDto.getEmail());
log.info("organization" + memberTestDto.getOrganization());
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<MemberTestDto> responseEntity = restTemplate.postForEntity(uri, dto, MemberTestDto.class);
log.info("responseEntity.getStatusCode = {}", responseEntity.getStatusCode());
log.info("responseEntity.getStatusCode = {}", responseEntity.getBody());
return responseEntity;
}
3. Header 관련
Header 에 값을 지정하기 위해서는 RequestEntity 를 이용합니다.
post형식이므로 uri를 post 로 지정해주고
.header 를 통해 8888 포트의 @RequestHeader("header-input") 값을 name 에 지정해주고 값을 넣어줍니다.
.body를 통해서 입력받은 Dto 값을 넣어줍니다.
public ResponseEntity<MemberTestDto> addHeader(String header,
MemberTestDto memberTestDto) {
URI uri = UriComponentsBuilder
.fromUriString("http://localhost:8888")
.path("/api/server/add-header")
.queryParam("name", memberTestDto.getName())
.queryParam("email", memberTestDto.getEmail())
.queryParam("organization", memberTestDto.getOrganization())
.encode()
.build()
.toUri();
RequestEntity<MemberTestDto> request = RequestEntity
.post(uri)
.header("header-input", header)
.body(memberTestDto);
log.info("header value = {}", header);
log.info("name" + memberTestDto.getName());
log.info("email" + memberTestDto.getEmail());
log.info("organization" + memberTestDto.getOrganization());
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<MemberTestDto> responseEntity =
restTemplate.exchange(request, MemberTestDto.class);
log.info("responseEntity.getStatusCode = {}", responseEntity.getStatusCode());
log.info("responseEntity.getStatusCode = {}", responseEntity.getBody());
return responseEntity;
}
'Spring > Spring-detail' 카테고리의 다른 글
JAVA 싱글톤, Spring 싱글톤에 대해. (0) | 2023.03.23 |
---|---|
Jar 파일에 대해 (0) | 2023.03.01 |
@ResponseStatus 와 ResponseEntity 차이점 (0) | 2023.01.21 |
Multipart 는 HTTP POST 로만 사용 (1) | 2023.01.11 |
spring boot docker mysql 기본설정 (0) | 2023.01.09 |
댓글