포트폴리오 서비스(유틸 클래스 및 API 클래스 완성하기)

·2023년 12월 6일
0

Portfolio Backtest

목록 보기
4/31

JsonUtility class

아직 계획은 없지만 추후 다른 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 메소드를 활용하여 구현하였다.

DataPortalApi class

Url에 application.porperties에 정의 해서 사용하기

#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에 저장을 해보겠다.

profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보