URLConnection을 통해 서버와 통신하여 요청을 보내고 서버가 다시 응답을 보내 받는 것까지 알아보았다. 그러면 이제 응답받은 내용들을 읽어보는 방법을 알아보자.
아래는 전체 코드로 응답이 200으로 성공이라면 실행 될 내용들을 적어 보았다.
더보기
if (resposeCode == 200) {
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
String response = sb.toString();
JsonParser parser = new JsonParser();
JsonObject responseJson = parser.parse(response).getAsJsonObject();
access_token = responseJson.getAsJsonObject("response").get("access_token").getAsString();
System.out.println("Access Token: " + access_token);
- if (responseCode == 200) : 만약에 responseCode 가 200이라면 OK라는 뜻을 포함하고 있음으로 응답에 성공했다는 것이다.
- BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())) :
더보기InputStream 객체를 먼저 생성하고, 그것을 InputStreamReader로 감싸서 BufferedReader를 생성하는 과정이다. getInputStream() 은 URLConnection 클래스에서 제공하는 메서드로 해당 URL로부터 입력 스트림을 얻기 위해 사용된다. getInputStream() 메서드를 호출하면, 웹 서버로 보낸 HTTP 요청에 대한 응답 데이터를 읽을 수 있는 입력 스트림을 반환한다. 그리고 보통은 InputStreamReader와 BufferedReader를 함께 사용하여 읽기 편의성을 높여 사용하는 것이 일반적이라고 한다. 즉, getInputStream()으로 받은 입력 스트림을 InputStreamReader로 감싸서 문자열 형태로 읽은 뒤 JsonParser를 이용하여 데이터를 파싱 하여 사용한다.InputStream inputStream = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
더보기InputStreamReader는 바이트 스트림(InputStream)을 문자 스트림(Reader)으로 변환해주는 역할을 한다. 입력스트림으로 부터 바이트 데이터를 읽어와서 문자 데이터로 변환해 주는 역할을 수행한다.
BufferedReader는 문자 스트림(Reader)을 버퍼링하여 입력 속도를 향상하는 역할을 한다. - StringBuilder sb = new StringBuilder() : 문자열을 연결하는데 사용하는 StringBuilder 객체를 생성한다. 이후 HTTP 응답을 한 줄씩 읽어서 이 StringBuilder에 추가할 것이다.
- String line : 문자열을 임시로 저장할 변수 line 을 선언한다.
- while ((line = br.readLine()) != null) : 2번에서 생성한 BufferedReader를 사용하여 HTTP응답을 한 줄씩 읽어 line 변수에 저장한다. 이 반복을 line 이 null이 아닌 동안에 계속 반복한다.
- sb.append(line + "\n") : StringBuilder에 읽어드린 line을 추가 하고 개행 문자를 추가하여 줄을 나눈다.
- br.close() : BufferReader 를 닫는다.
- String response = sb.toString() : StringBuilder에 저장된 모든 내용을 객체를 문자열로 표현할 때 사용되는 toString을 이용하여 하나의 문자열로 반환한다.
- JsonParser parser = new JsonParser() : JSON형식의 문자열을 파싱 하기 위해 객체를 만든다.
- JsonObject responseJson = parser.parse(response).getAsJsonObject();
더보기두줄로 바꾸면 위와 같다. 우선 parse를 이용해서 9번의 JsonParser를 사용하여 문자열 response를 JSON으로 파싱 한 후, 파싱 된 결과를 JsonElement 객체로 저장한다. 그리고 그 JsonElement 객체를 getAsJsonObject() 메서드를 사용하여 JsonObject로 변환하여 responseJson 변수에 저장한다. 이렇게 하면 responseJson은 JSON 형식의 데이터를 조작할 수 있는 구조로 변환된 것이다.JsonElement parsedJson = parser.parse(response);
JsonObject responseJson = parsedJson.getAsJsonObject();더보기getAsJsonObject() 메서드 : JsonElement 객체가 JSON 객체일 경우, 즉 { }로 둘러싸였다면 JSON 데이터를 JsonObject로 변환하여 반환하는 역할을 한다. - access_token = responseJson.getAsJsonObject("response"). get("access_token"). getAsString() : 세 번의 프로세스들로 이루어져 있다.
더보기11-1. JSON 데이터에서 "response" 객체를 가져온다.JsonElement responseElement = responseJson.getAsJsonObject("response");
JsonElement accessTokenElement = responseElement.get("access_token");
String access_token = accessTokenElement.getAsString()
11-2. "response" 객체에서 "access_token" 값을 가져온다.
11-3. "access_token" 값을 문자열로 추출(. getAsString) 하여 access_token 변수에 저장한다. - System.out.println("Access Token: " + access_token) : 그리고 잘 되었나 한번 출력해서 확인해본다~
'JAVA' 카테고리의 다른 글
[Java] LocalDate에날짜 더하기고 빼기 (plusMonth, minusWeeks) (0) | 2023.08.10 |
---|---|
[Java] LocalDate, LocalTime, ChronoUnit 을 이용한 시간 표현 (0) | 2023.08.06 |
자바 URLConnection과 HttpURLConnection (0) | 2023.07.29 |
[JAVA] 입출력을 사용하여 입력 값을 받는 메모장 프로그램 만들기 (1) | 2023.03.13 |
[JAVA] 입출력 스트림 ⑤ 파일 복사 (0) | 2023.03.13 |