Rest Template 기본 사용법 및 Response Error Handle에 관한 내용은 아래 포스팅을 참고하기 바란다.
RestTemplate을 이용하여 Open API를 사용해 보자.
RestTemplate 기본 사용법 / Response Error Handle
RestTemplate 기본 사용법 / Response Error Handle
RestTemplate란Spring Framework에서 RESTful 웹 서비스와 통신하기 위한 동기식 클라이언트로 HTTP 요청을 쉽게 보내고 응답을 받을 수 있도록 도와주는 유틸리티 클래스다. 주요 기능HTTP 메서드 지원GET,
fvor001.tistory.com
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
공공 데이터 포탈에는 다양한 Open API가 제공된다. 그중 한국수출입은행 환율 정보 Open API를 사용해 보겠다.
RestTemplateConfig.java
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() throws Exception{
RestTemplate restTemplate = new RestTemplate();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(5000); // read timeout (ms)
factory.setConnectTimeout(3000); // connection timeout (ms)
//Apache HttpComponents HttpClient
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setMaxConnTotal(50) //최대 커넥션 수
.setMaxConnPerRoute(20) //각 호스트(IP와 Port의 조합)당 커넥션 풀에 생성가능한 커넥션 수
.build();
factory.setHttpClient(httpClient);
restTemplate.setRequestFactory(factory);
restTemplate.setErrorHandler(new RestTemplateErrorHandler());
return restTemplate;
}
}
Test.java
public String selectExchangeByKoreaexim(String bseDt) {
ObjectMapper objectMapper = new ObjectMapper();
URI uri = UriComponentsBuilder.fromHttpUrl("https://www.koreaexim.go.kr/site/program/financial/exchangeJSON")
.queryParam("authkey", "xxxxxxxxxxxxxxxxxxx") //인증키
.queryParam("searchdate", bseDt)
.queryParam("data", "AP01") //AP01 : 환율, AP02 : 대출금리, AP03 : 국제금리
.build()
.encode() // 한글 인코딩 처리 (default : UTF-8)
.toUri();
HttpHeaders headers = new HttpHeaders(); // header
HttpEntity<String> entity = new HttpEntity<>(headers); // http entity
log.error("REST API Request URI : {}", uri.toString());
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
HttpStatus responseStatus = response.getStatusCode();
HttpHeaders responseHeaders = response.getHeaders();
String responseBody = response.getBody();
log.error("status : {}", responseStatus.value());
log.error("response body : {}", responseBody);
return responseBody;
}
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
API URL이 HTTPS라서 SSL인증 오류가 발생하였다.
테스트를 위해 로컬 환경에서 SSL인증을 무시하는 방법에 대해 작성하도록 하겠다.
보안상 위험할 수 있으므로 운영 환경에서는 사용하지 말아야 한다.
RestTemplateConfig.java
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() throws Exception{
RestTemplate restTemplate = new RestTemplate();
/**
* SSL 검증 비활성화 (로컬 환경에서만 사용)
*/
// 모든 인증서 신뢰
SSLContext sslContext = SSLContextBuilder.create()
.loadTrustMaterial(TrustAllStrategy.INSTANCE)
.build();
...
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setSSLContext(sslContext)
...
.build();
...
return restTemplate;
}
}
Test 로그
REST API Request URI : https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=xxxxxxxxxxxx&searchdate=20240923&data=AP01
status : 200
response body : [{"result":1,"cur_unit":"AED","ttb":"358.44","tts":"365.69","deal_bas_r":"362.07","bkpr":"362","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"362","kftc_deal_bas_r":"362.07","cur_nm":"아랍에미리트 디르함"},{"result":1,"cur_unit":"AUD","ttb":"896","tts":"914.11","deal_bas_r":"905.06","bkpr":"905","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"905","kftc_deal_bas_r":"905.06","cur_nm":"호주 달러"},{"result":1,"cur_unit":"BHD","ttb":"3,493.7","tts":"3,564.27","deal_bas_r":"3,528.99","bkpr":"3,528","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"3,528","kftc_deal_bas_r":"3,528.99","cur_nm":"바레인 디나르"},{"result":1,"cur_unit":"BND","ttb":"1,019.9","tts":"1,040.51","deal_bas_r":"1,030.21","bkpr":"1,030","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,030","kftc_deal_bas_r":"1,030.21","cur_nm":"브루나이 달러"},{"result":1,"cur_unit":"CAD","ttb":"970.29","tts":"989.9","deal_bas_r":"980.1","bkpr":"980","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"980","kftc_deal_bas_r":"980.1","cur_nm":"캐나다 달러"},{"result":1,"cur_unit":"CHF","ttb":"1,547.75","tts":"1,579.02","deal_bas_r":"1,563.39","bkpr":"1,563","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,563","kftc_deal_bas_r":"1,563.39","cur_nm":"스위스 프랑"},{"result":1,"cur_unit":"CNH","ttb":"186.68","tts":"190.45","deal_bas_r":"188.57","bkpr":"188","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"188","kftc_deal_bas_r":"188.57","cur_nm":"위안화"},{"result":1,"cur_unit":"DKK","ttb":"196.99","tts":"200.96","deal_bas_r":"198.98","bkpr":"198","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"198","kftc_deal_bas_r":"198.98","cur_nm":"덴마아크 크로네"},{"result":1,"cur_unit":"EUR","ttb":"1,469.38","tts":"1,499.07","deal_bas_r":"1,484.23","bkpr":"1,484","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,484","kftc_deal_bas_r":"1,484.23","cur_nm":"유로"},{"result":1,"cur_unit":"GBP","ttb":"1,753.05","tts":"1,788.46","deal_bas_r":"1,770.76","bkpr":"1,770","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,770","kftc_deal_bas_r":"1,770.76","cur_nm":"영국 파운드"},{"result":1,"cur_unit":"HKD","ttb":"168.99","tts":"172.4","deal_bas_r":"170.7","bkpr":"170","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"170","kftc_deal_bas_r":"170.7","cur_nm":"홍콩 달러"},{"result":1,"cur_unit":"IDR(100)","ttb":"8.69","tts":"8.86","deal_bas_r":"8.78","bkpr":"8","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"8","kftc_deal_bas_r":"8.78","cur_nm":"인도네시아 루피아"},{"result":1,"cur_unit":"JPY(100)","ttb":"914.69","tts":"933.16","deal_bas_r":"923.93","bkpr":"923","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"923","kftc_deal_bas_r":"923.93","cur_nm":"일본 옌"},{"result":1,"cur_unit":"KRW","ttb":"0","tts":"0","deal_bas_r":"1","bkpr":"1","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1","kftc_deal_bas_r":"1","cur_nm":"한국 원"},{"result":1,"cur_unit":"KWD","ttb":"4,315.73","tts":"4,402.92","deal_bas_r":"4,359.33","bkpr":"4,359","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"4,359","kftc_deal_bas_r":"4,359.33","cur_nm":"쿠웨이트 디나르"},{"result":1,"cur_unit":"MYR","ttb":"313.1","tts":"319.43","deal_bas_r":"316.27","bkpr":"316","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"316","kftc_deal_bas_r":"316.27","cur_nm":"말레이지아 링기트"},{"result":1,"cur_unit":"NOK","ttb":"125.43","tts":"127.96","deal_bas_r":"126.7","bkpr":"126","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"126","kftc_deal_bas_r":"126.7","cur_nm":"노르웨이 크로네"},{"result":1,"cur_unit":"NZD","ttb":"820.96","tts":"837.55","deal_bas_r":"829.26","bkpr":"829","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"829","kftc_deal_bas_r":"829.26","cur_nm":"뉴질랜드 달러"},{"result":1,"cur_unit":"SAR","ttb":"350.86","tts":"357.95","deal_bas_r":"354.41","bkpr":"354","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"354","kftc_deal_bas_r":"354.41","cur_nm":"사우디 리얄"},{"result":1,"cur_unit":"SEK","ttb":"129.42","tts":"132.03","deal_bas_r":"130.73","bkpr":"130","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"130","kftc_deal_bas_r":"130.73","cur_nm":"스웨덴 크로나"},{"result":1,"cur_unit":"SGD","ttb":"1,019.9","tts":"1,040.51","deal_bas_r":"1,030.21","bkpr":"1,030","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,030","kftc_deal_bas_r":"1,030.21","cur_nm":"싱가포르 달러"},{"result":1,"cur_unit":"THB","ttb":"39.99","tts":"40.8","deal_bas_r":"40.4","bkpr":"40","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"40","kftc_deal_bas_r":"40.4","cur_nm":"태국 바트"},{"result":1,"cur_unit":"USD","ttb":"1,316.6","tts":"1,343.19","deal_bas_r":"1,329.9","bkpr":"1,329","yy_efee_r":"0","ten_dd_efee_r":"0","kftc_bkpr":"1,329","kftc_deal_bas_r":"1,329.9","cur_nm":"미국 달러"}]
String To Json
[
{
"result": 1,
"cur_unit": "AED",
"ttb": "358.44",
"tts": "365.69",
"deal_bas_r": "362.07",
"bkpr": "362",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "362",
"kftc_deal_bas_r": "362.07",
"cur_nm": "아랍에미리트 디르함"
},
{
"result": 1,
"cur_unit": "AUD",
"ttb": "896",
"tts": "914.11",
"deal_bas_r": "905.06",
"bkpr": "905",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "905",
"kftc_deal_bas_r": "905.06",
"cur_nm": "호주 달러"
},
{
"result": 1,
"cur_unit": "BHD",
"ttb": "3,493.7",
"tts": "3,564.27",
"deal_bas_r": "3,528.99",
"bkpr": "3,528",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "3,528",
"kftc_deal_bas_r": "3,528.99",
"cur_nm": "바레인 디나르"
},
{
"result": 1,
"cur_unit": "BND",
"ttb": "1,019.9",
"tts": "1,040.51",
"deal_bas_r": "1,030.21",
"bkpr": "1,030",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,030",
"kftc_deal_bas_r": "1,030.21",
"cur_nm": "브루나이 달러"
},
{
"result": 1,
"cur_unit": "CAD",
"ttb": "970.29",
"tts": "989.9",
"deal_bas_r": "980.1",
"bkpr": "980",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "980",
"kftc_deal_bas_r": "980.1",
"cur_nm": "캐나다 달러"
},
{
"result": 1,
"cur_unit": "CHF",
"ttb": "1,547.75",
"tts": "1,579.02",
"deal_bas_r": "1,563.39",
"bkpr": "1,563",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,563",
"kftc_deal_bas_r": "1,563.39",
"cur_nm": "스위스 프랑"
},
{
"result": 1,
"cur_unit": "CNH",
"ttb": "186.68",
"tts": "190.45",
"deal_bas_r": "188.57",
"bkpr": "188",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "188",
"kftc_deal_bas_r": "188.57",
"cur_nm": "위안화"
},
{
"result": 1,
"cur_unit": "DKK",
"ttb": "196.99",
"tts": "200.96",
"deal_bas_r": "198.98",
"bkpr": "198",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "198",
"kftc_deal_bas_r": "198.98",
"cur_nm": "덴마아크 크로네"
},
{
"result": 1,
"cur_unit": "EUR",
"ttb": "1,469.38",
"tts": "1,499.07",
"deal_bas_r": "1,484.23",
"bkpr": "1,484",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,484",
"kftc_deal_bas_r": "1,484.23",
"cur_nm": "유로"
},
{
"result": 1,
"cur_unit": "GBP",
"ttb": "1,753.05",
"tts": "1,788.46",
"deal_bas_r": "1,770.76",
"bkpr": "1,770",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,770",
"kftc_deal_bas_r": "1,770.76",
"cur_nm": "영국 파운드"
},
{
"result": 1,
"cur_unit": "HKD",
"ttb": "168.99",
"tts": "172.4",
"deal_bas_r": "170.7",
"bkpr": "170",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "170",
"kftc_deal_bas_r": "170.7",
"cur_nm": "홍콩 달러"
},
{
"result": 1,
"cur_unit": "IDR(100)",
"ttb": "8.69",
"tts": "8.86",
"deal_bas_r": "8.78",
"bkpr": "8",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "8",
"kftc_deal_bas_r": "8.78",
"cur_nm": "인도네시아 루피아"
},
{
"result": 1,
"cur_unit": "JPY(100)",
"ttb": "914.69",
"tts": "933.16",
"deal_bas_r": "923.93",
"bkpr": "923",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "923",
"kftc_deal_bas_r": "923.93",
"cur_nm": "일본 옌"
},
{
"result": 1,
"cur_unit": "KRW",
"ttb": "0",
"tts": "0",
"deal_bas_r": "1",
"bkpr": "1",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1",
"kftc_deal_bas_r": "1",
"cur_nm": "한국 원"
},
{
"result": 1,
"cur_unit": "KWD",
"ttb": "4,315.73",
"tts": "4,402.92",
"deal_bas_r": "4,359.33",
"bkpr": "4,359",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "4,359",
"kftc_deal_bas_r": "4,359.33",
"cur_nm": "쿠웨이트 디나르"
},
{
"result": 1,
"cur_unit": "MYR",
"ttb": "313.1",
"tts": "319.43",
"deal_bas_r": "316.27",
"bkpr": "316",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "316",
"kftc_deal_bas_r": "316.27",
"cur_nm": "말레이지아 링기트"
},
{
"result": 1,
"cur_unit": "NOK",
"ttb": "125.43",
"tts": "127.96",
"deal_bas_r": "126.7",
"bkpr": "126",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "126",
"kftc_deal_bas_r": "126.7",
"cur_nm": "노르웨이 크로네"
},
{
"result": 1,
"cur_unit": "NZD",
"ttb": "820.96",
"tts": "837.55",
"deal_bas_r": "829.26",
"bkpr": "829",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "829",
"kftc_deal_bas_r": "829.26",
"cur_nm": "뉴질랜드 달러"
},
{
"result": 1,
"cur_unit": "SAR",
"ttb": "350.86",
"tts": "357.95",
"deal_bas_r": "354.41",
"bkpr": "354",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "354",
"kftc_deal_bas_r": "354.41",
"cur_nm": "사우디 리얄"
},
{
"result": 1,
"cur_unit": "SEK",
"ttb": "129.42",
"tts": "132.03",
"deal_bas_r": "130.73",
"bkpr": "130",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "130",
"kftc_deal_bas_r": "130.73",
"cur_nm": "스웨덴 크로나"
},
{
"result": 1,
"cur_unit": "SGD",
"ttb": "1,019.9",
"tts": "1,040.51",
"deal_bas_r": "1,030.21",
"bkpr": "1,030",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,030",
"kftc_deal_bas_r": "1,030.21",
"cur_nm": "싱가포르 달러"
},
{
"result": 1,
"cur_unit": "THB",
"ttb": "39.99",
"tts": "40.8",
"deal_bas_r": "40.4",
"bkpr": "40",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "40",
"kftc_deal_bas_r": "40.4",
"cur_nm": "태국 바트"
},
{
"result": 1,
"cur_unit": "USD",
"ttb": "1,316.6",
"tts": "1,343.19",
"deal_bas_r": "1,329.9",
"bkpr": "1,329",
"yy_efee_r": "0",
"ten_dd_efee_r": "0",
"kftc_bkpr": "1,329",
"kftc_deal_bas_r": "1,329.9",
"cur_nm": "미국 달러"
}
]
RestTemplate 기본 사용법 / Response Error Handle (1) | 2024.09.23 |
---|
댓글 영역