Loading...

JAVA / / 2022. 2. 21. 16:29

PCR 검사 가능 병원 조회 - ex02

반응형

두 번째 테스트 목적 : 파싱(json -> java)

 

공공데이터에서 받아온 json을

자바 오브젝트로 파싱 하기 위한

ResponseDto 클래스를 생성해준다.

package site.metacoding.hospapp.ex02;

import java.util.List;

import lombok.Data;

// public 클래스는 하나의 파일에 하나밖에 못만든다
// ResponseDto가 주인임

@Data
class Body {
    private Items items;
    private Integer numOfRows;
    private Integer pageNo;
    private Integer totalCount;
}

@Data
class Header {
    private String resultCode;
    private String resultMsg;
}

@Data
class Item {
    private String addr;
    private Integer mgtStaDd;
    private String pcrPsblYn;
    private String ratPsblYn;
    private Integer recuClCd;
    private String rprtWorpClicFndtTgtYn;
    private String sgguCdNm;
    private String sidoCdNm;
    private String telno;
    private Integer XPos;
    private Double XPosWgs84;
    private Integer YPos;
    private Double YPosWgs84;
    private String yadmNm;
    private String ykihoEnc;
}

@Data
class Items {
    private List<Item> item;
}

@Data
class Response {
    private Header header;
    private Body body;
}

@Data
public class ResponseDto {
    private Response response;
}

 

3. 파싱

 

이전 테스트에서 데이터 다운로드까지 했다.

 

gson을 사용해

json 데이터를 자바 오브젝트에 넣어주자.

// 3. 파싱
Gson gson = new Gson();
ResponseDto responseDto = gson.fromJson(sbDownload.toString(), ResponseDto.class);

 

4. 검증

 

ResponseDto에 데이터들이

잘 들어왔는지 검증해보아야 한다.

// 4. 검증
int itemSize = responseDto.getResponse().getBody().getItems().getItem().size();
System.out.println("아이템 사이즈 : " + itemSize);
System.out.println("totalCount : " + responseDto.getResponse().getBody().getTotalCount());
System.out.println(responseDto);

 

10개의 병원 정보가 잘 들어왔고,

결과문에 =이 있는 것으로 보아

자바 오브젝트로 잘 변환되었다.

 

(json에는 =이 아닌 :(콜론)을 사용하기 때문!)

 

package site.metacoding.hospapp.ex02;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

// 테스트 주도 개발!!
// 목적 : 파싱(json -> java) : gson 
public class ParsingTest {

    public static void main(String[] args) {

        // 1. URL 주소 만들기(끝)
        StringBuffer sbUrl = new StringBuffer();

        sbUrl.append("http://apis.data.go.kr/B551182/rprtHospService/getRprtHospService");
        sbUrl.append("?serviceKey="); // 서비스 키
        sbUrl.append("서비스키%3D%3D");
        sbUrl.append("&pageNo="); // 몇번째 페이지 인지
        sbUrl.append("1");
        sbUrl.append("&numOfRows=");
        sbUrl.append("10"); // 한 페이지당 몇개씩 가져올지
        sbUrl.append("&_type=");
        sbUrl.append("json"); // 데이터 포맷은 JSON

        // 2. 다운로드 받기(끝)
        try {
            // URL라이브러리가 ==을 %3D%3D로 바꿔줌 => url이 safe한 상태
            // 쿼리 스트링 때문에!!
            // 이미 인코드된 것을 또 인코드할 수도 있는데
            // URL 라이브러리는 URL safe가 적용되어 있으면 더 이상 반영하지 않는다.
            URL url = new URL(sbUrl.toString());
            // http인지 https인지 모르기때문에 다운캐스팅해서 맞춰써라
            // conn이 socket!
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "utf-8"));

            StringBuffer sbDownload = new StringBuffer(); // 통신결과 모아두기

            while (true) {
                String input = br.readLine();

                // 버퍼가 비었을 때 break
                if (input == null) {
                    break;
                }

                sbDownload.append(input);
            }

            // 3. 파싱
            Gson gson = new Gson();
            ResponseDto responseDto = gson.fromJson(sbDownload.toString(), ResponseDto.class);

            // 4. 검증
            int itemSize = responseDto.getResponse().getBody().getItems().getItem().size();
            System.out.println("아이템 사이즈 : " + itemSize);
            System.out.println("totalCount : " + responseDto.getResponse().getBody().getTotalCount());
            System.out.println(responseDto);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

 

 

 

[출처]

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com


메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형