반응형
▶ RestTemplate 이란?
- RestTemplate은 간편하게 Rest방식의 API를 호출할 수 있는 Spring 내장 클래스이다.
- Spring 3.0부터 지원하는 Spring의 HTTP 통신 템플릿이다.
- Restful의 원칙을 지킬 수 있으며 HTTP 메서드들에 적합한 여러 메서드 제공한다.
- JSON, XML, String 응답을 모두 받는다.
- Blocking I/O 기반의 동기방식을 사용한다. (Rest API 호출 후 응답을 받을 때까지 기다림)
- Header + Content-Type을 설정해서 외부 API 호출이 가능하다.
▶ RestTemplate 메서드
※ 기본적으로 exchange() 함수를 많이 사용한다.
- get 요청에 header가 필요한 경우 get Method에서는 header를 추가할 수 없으므로 exchange method를 사용한다.
▶ RestTemplate 사용방법
- builde.gradle 파일에 dependencies 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
1. Rest API를 호출할 수 있는 메서드 생성한다.
2. RestTemplate 객체를 생성한다.
- 생성된 객체로 api를 호출하게 된다.
※ HttpComponentsClientHttpRequestFactory 객체를 사용하면 다음과 같이 타임아웃을 제어 가능하다.
- RestTemplate restTemplate = new RestTemplate(); -> 타임아웃이 필요 없다면, 왼쪽같이 생성해도 상관없다.
3. 데이터 호출
- header클래스를 정의한다.
- url 정의한다.
- resTemplate.exchage() 메서드로 API 호출한다.
전달받는 값의 형태는 JSON이며, String 자체로 받아 파싱도 가능하다.
그리고 RestTemplate의 경우 편리하게 Map, 사용자가 정의한 class 등의 다양한 형태로 데이터를 파싱 해서 받을 수 있다.
◆ 다음과 같이 정의하면 된다.
- ResponseEntity<T> response = restTemplate.exchange(uri.toString(), HttpMethod.GET, httpEntity, 원하는 클래스 타입.Class)
◆ 참고 : 위의 ResponseEntity에 Map<String, ?> uriVariables 추가 시
- 쿼리 문자열을 확장시켜 주는 역할이다.
String url = "http://www.sample.com?foo={fooValue}";
Map<String, String> uriVariables = new HashMap<>();
uriVariables.put("fooValue", "2");
// "http://www.sample.com?foo=2"
restTemplate.getForObject(url, Object.class, uriVariables);
※ HttpEntity
- Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다.
- HTTP 프로토콜을 이용하는 통신의 header와 body관련 정보를 저장할 수 있도록 하는 역할을 한다.
4. 데이터 호출 결과
: ResponseEntity는 사용자의 HttpRequset에 대한 응답 데이터를 포함하는 클래스이다. 따라서 아래와 같은 정보를 포함한다.
- http status code
- 헤더 정보
- 데이터 (body 정보)
▶ 참고 예제
public static <T> T send(String uri, HttpMethod method, Object vars, HttpHeaders headers, Class<T> responseType, Map<String, ?> uriVariables) {
headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
log.info("header {}" , headers);
HttpEntity httpEntity = new HttpEntity(vars, headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<T> response = null;
if(uriVariables != null)
response = restTemplate.exchange(uri, method, httpEntity, responseType, uriVariables);
else
response = restTemplate.exchange(uri, method, httpEntity, responseType);
log.info("response = > " + response );
return response.getBody();
}
반응형
'Java' 카테고리의 다른 글
[알고리즘/Java] String(문자열) - 특정 문자 뒤집 (0) | 2022.07.24 |
---|---|
[알고리즘/Java] String(문자열) - 단어 뒤집기 (0) | 2022.07.24 |
[알고리즘/Java] String(문자열) - 문장 속 단어 (0) | 2022.07.18 |
[알고리즘/Java] String(문자열) - 대소문자 변환 (0) | 2022.07.16 |
[알고리즘/Java] String(문자열) - 문자찾기 (0) | 2022.07.15 |