아직 계획은 없지만 추후 다른 api의 호출을 고려하여 Json을 가져오는 부분을 별도의 utils 패키지에 Jsonutility 클래스로 분리하였다.
public final class JsonUtility {
public static String getJsonFromUrl(String urlstr) {
BufferedReader br = null;
try {
URL url = new URL(urlstr);
HttpURLConnection urlconnection = (HttpURLConnection) url.openConnection();
urlconnection.setRequestMethod("GET");
br = new BufferedReader(new InputStreamReader(urlconnection.getInputStream(), StandardCharsets.UTF_8));
String result;
String line;
for (result = ""; (line = br.readLine()) != null; result = result + line) {
}
return result;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return "{}";
}
public static String getJsonFromFile(String filePath) {
try {
ClassPathResource resource = new ClassPathResource(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
String result;
String line;
for (result = ""; (line = br.readLine()) != null; result = result + line) {
}
return result;
} catch (IOException e) {
e.printStackTrace();
}
return "{}";
}
}
@Conponent를 사용하여 의존성 주입을 고려하여 구현할수도 있지만, 테스트가 많이 필요한 부분도 아니고 유틸로 사용하기에 static 메소드를 활용하여 구현하였다.
#DataPortal base URL
dataPortal.url=https://apis.data.go.kr/1160100/service/GetStockSecuritiesInfoService
@Value("${dataPortal.url}")
private String dataPortalUrl;
해당 방식을 통해 등록할 수 있었다.
@Component
public class DataPortalApi {
@Value("${data-portal-key}")
private String dataPortalKey;
@Value("${dataPortal.url}")
private String dataPortalUrl;
public String getStockInfo(String baseDate) {
String apiUrl = dataPortalUrl+"/getStockPriceInfo";
String queryParams = "?serviceKey=" + dataPortalKey
+ "&numOfRows=10000&resultType=json"
+ "&basDt=" + baseDate;
String json = JsonUtility.getJsonFromUrl(apiUrl + queryParams);
return json;
}
public JsonArray parseJson(String json) {
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(json, JsonObject.class);
JsonArray itemsArray = jsonObject.getAsJsonObject("response")
.getAsJsonObject("body")
.getAsJsonObject("items")
.getAsJsonArray("item");
return itemsArray;
}
}
이제 다음에는 Entity를 구성하고 h2 database를 활용해서 db에 저장을 해보겠다.