개인프로젝트/어린이사고다발지역검색
OpenApi 호출 @Component 생성
질주하는구
2022. 3. 11. 17:22
기본 셋팅이 마무리 되었고 어떤 구성으로 소스를 생성 할지도 결정 했으니 OpenApi를 호출하는 componet를 작성 해보겠습니다.
ApiCallComp 는 검색 조건을 전달 받아 api를 호출 하고 그 결과를 return 해주는 아주 간단한 소스 입니다.
URL 호출은 HttpClient 패키지를 통해서 작업 하겠습니다.
저는 편한 okhttp를 주로 사용 했는데 HttpClient를 사용하는 이유는 해당 패키지가
https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EA%B3%84%EC%A2%8C-%EC%A1%B0%ED%9A%8C
업비트 api의 예제 소스로 사용되는 패키지 이기 때문 입니다.
http연결 부터 뭔가 강력한 신뢰를 느낄수 있습니다.(http연결 관련한 라이브러리는 워낙에 잘 되어 있어서 무엇을 사용하던 상관 없습니다. 개인적으로는 okhttp를 추천하고 싶습니다.)
@Component("apiCallComp")
public class ApiCallComp {
private String serviceUrl = "http://apis.data.go.kr/B552061/frequentzoneChild/getRestFrequentzoneChild";
//application.properties의 설정 정보를 가지고 올때 @Value("${설정key}") 형식으로 호출
@Value("${openApi.serviceKey}")
private String serviceKey;
public String callAccidentAreaInfo(SearchParamVO paramVO) throws ClientProtocolException, IOException {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(serviceUrl+"?"+URLEncodedUtils.format(makeParameterList(paramVO.getSearchYear(), paramVO.getSearchSiDo(), paramVO.getSearchGuGun(), paramVO.getSearchPageNo()), "utf-8"));
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
String returnJson = EntityUtils.toString(entity, "UTF-8");
return returnJson;
}
public List<BasicNameValuePair> makeParameterList(String searchYearCd, String siDo, String guGun, String searchPageNo){
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("ServiceKey", serviceKey));
params.add(new BasicNameValuePair("type", "json"));
params.add(new BasicNameValuePair("searchYearCd", searchYearCd));
params.add(new BasicNameValuePair("siDo", makeSiDoCode(siDo)));
params.add(new BasicNameValuePair("guGun", makeGuGunCode(guGun)));
params.add(new BasicNameValuePair("numOfRows", "10"));
params.add(new BasicNameValuePair("pageNo", searchPageNo));
return params;
}
//법정동 코드값 앞 2자리만 사용 (ex>4111100000 -> 41)
public String makeSiDoCode(String siDo) {
return StringUtils.substring(siDo, 0, 2);
}
//법정동 코드값 2~5자리만 사용 (ex>4111100000 -> 111)
public String makeGuGunCode(String guGun) {
return StringUtils.substring(guGun, 2, 5);
}
}
특별한 내용은 없고 service키를 가지고 오기 위해 application.properties 파일에 openApi.serviceKey 프로퍼티를 추가 했습니다.
추가로 get방식으로 호출시 현재 소스는 BasicNameValuePair 를 이용하고 있지만 다른 방법으로 아래와 같은 방법도
존재 합니다.
URIBuilder builder = new URIBuilder();
builder.setScheme("http")
.setHost(host)
.setPort(port)
.setPath(yourpath)
.setParameter("column1", "data1")
.setParameter("column2", "data2");
파라미터 전달 시 편한 방법으로 선택 해서 소스 구성을 해주시면 됩니다.
현재 소스에서는 응답 실패에 대한 처리가 되어 있지 않은데 서비스 하시려는 소스 에서는 관련 소스가 추가 되어야
합니다.
반응형