티스토리 뷰

반응형

 Spring Boot를 활용하여 Restful 서버 개발을 하다보면, 다른 API를 호출할 일이 종종 생기는데, RestTemplete을 활용하면 좋다고한다. 나는 GPS 좌표(경도, 위도)를 파라미터로 하여 호출할 경우, 주소(도로명 및 지번주소)를 돌려주는 API를 활용하기로 했다.





 https://developers.naver.com 에서 위 그림과 같은 명세를 찾을 수 있다. (다른 API를 활용하는 경우에도 참고하길 바란다.) 나같은 경우, 안내된 URL로 GET요청을 날려야 했는데 NAVER에서 제공하는 JAVA 예제는 너무 길고 불편했다.


 그래서 RestTemplete를 활용하기로 했는데, 구글링하면 대체로  getForObject, getForEntity를 활용하는 방법을 소개한다. 아래의 소스코드를 참고해보자.



public String getGpsToAddrJsonResult(double xPos, double yPos) {
 
    RestTemplate restTemplate = new RestTemplate();
    Map<string, string> vars = new HashMap<string, string>();
    vars.put("xPos", xPos);
    vars.put("yPos", yPos);
    String result = restTemplate.getForObject("https://openapi.naver.com/v1/map/reversegeocode?"
                +"query={xPos},{yPos}", String.class, vars);
}


 단 몇줄만으로 GET요청에 파라미터까지 끼워서 Request를 했다. 매우 간단한 방식이지만 바로 오류가 발생했다. 이유를 찾아보니 헤더에 KEY 정보를 할당하지 않은 것.


 getForObject, getForEntity 등의 메소드는 기본 HTTP 헤더를 사용하기에, 이대로는 네이버 지도 API를 사용할 수 없었다. 결국 HTTP 헤더 정보를 세팅하려면 다른 메소드를 활용해야만 했다. 다행히 방법이 아예 없지는 않아서 아래와 같이 구현해봤다.


public ResponseEntity<string> getGpsToAddrJsonResult(double xPos, double yPos) {
 
        RestTemplate restTemplate = new RestTemplate();
        
        /* 헤더정보세팅 */
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("X-Naver-Client-Id", clientId);
        httpHeaders.add("X-Naver-Client-Secret", clientSecret);
 
        String url = "https://openapi.naver.com/v1/map/reversegeocode?encoding=utf-8"
                +"&amp;query="+xPos+","+yPos;
 
        return restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(httpHeaders), String.class);
    }



 GetForObject 대신, exchage 메소드를 활용했다. httpHeaders를 이용하여 쉽게 헤더정보를 추가했다. 게다가 응답을 ResponseEntity에 쌓여있는 String으로 받아, HTTP Status에 따른 오류처리가 가능해졌다. (오류처리는 위 메소드를 호출하는 쪽에서 처리했다.) 


 만약 JSON으로 이뤄진 응답을 객체화하고 싶다면, exchange의 가장 마지막 파라미터를 {직접선언한클래스}.class로 지정하면 된다. (JSON 구조와 일치하는 Class 형태라면, 알아서 매핑된다.)





-끝-





출처및참고

https://developers.naver.com




반응형
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함
Total
Today
Yesterday