RestTemplate
Spring 3.0 이상에서 제공하는 http 통신을 위한 템플릿으로 Rest Api 호출 후 응답까지 기다리는 동기식 클라이언트
Spring Boot의 Java Sub Module에서 Kakao Local Api 호출이 필요하여 구현한 간단한 예제입니다.
예제에서 사용할 것
- RestTemplate
- HttpHeaders
- UriComponentsBuilder
- HttpEntity
String uri;
RestTemplate restTemplate = new RestTemplate();
// 카카오 Api Key를 헤더에 셋팅합니다.
final HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", REST_API_KEY);
// 파라미터 설정
// query 파라미터는 인코딩 이슈로 이후에 추가
UriComponentsBuilder builder = null;
builder = UriComponentsBuilder
.fromHttpUrl(REST_API_URL)
.queryParam("page", 5)
.queryParam("size", 15)
.queryParam("sort", "accuracy")
.queryParam("category_group_code", "FD6")
.queryParam("x", xLng)
.queryParam("y", yLat)
.queryParam("radius", "500");
// 헤더를 넣은 HttpEntity 생성
final HttpEntity<String> entity = new HttpEntity<String>(headers);
Set Header, Parameters, Entity
카카오 개발 가이드 를 참고했습니다.
ParameterizedTypeReference<Map<String, Object>> typeRef =
new ParameterizedTypeReference<Map<String, Object>>() {};
- ParameterizedTypeReference
Object와 같은 Generic Type을 Response 받기 위해 사용
타입소거(Type Erasure)되지 않기 위해 사용하는 Super Type Token 이라고 한다.
Super Type Token은 자바 컴파일 시 소거되지 않는 제네릭 정보 ..라고 하는데
지금 당장 POJO로 받기 귀찮아서 Map으로 받았는데.. 그냥 처음부터 POJO로 받을 걸 그랬나 싶다.
추후에 POJO로 변경 할 예정
// 한글
uri = builder.encode().toUriString() + "&query=" + query;
ResponseEntity<Map<String, Object>> response = restTemplate.exchange(
uri,
HttpMethod.GET,
entity,
typeRef);
- exchange(RequestEntity<?> requestEntity, Class<T> responseType)
Execute the request specified in the given RequestEntity and return the response as ResponseEntity.
-> Http Method를 지정해서 요청 후 RequestEntity로 반환
위 출처는 스프링 개발문서 입니다.
URI로 Encode를 하면, query key 로 전달되어야하는 "맛집" 이라는 value 값이 변환되어 kakao api에서 인식하지 못했다.
그래서 부득이하게 파라미터들을 uri로 인코딩한 후 한글 값을 따로 추가하여 request 했습니다.
- Test Code
ResponseEntity<Map<String, Object>> responseEntity = searchKeywordService.callKaKaoLocalApi(xLng, yLng, "맛집");
log.info(responseEntity.getStatusCode().toString());
log.info(responseEntity.getBody().get("documents").toString());
참고로 위도 경도는 프론트에서 Geolocation API를 사용하여 받았습니다.
- 200 OK ~~~
'Spring Boot' 카테고리의 다른 글
좋은 객체지향 설계의 5가지 원칙 SOLID & Spring (0) | 2021.06.08 |
---|---|
객체 지향 설계와 Spring boot (0) | 2021.06.07 |
스프링 어노테이션 :: Spring Annotation (0) | 2021.05.18 |
스프링 싱글톤 :: Spring Singleton (0) | 2021.05.11 |
MyBatis Framework 개념, Spring Boot 연동 (0) | 2020.11.16 |