[JsonParser() is deprecated]
프로젝트 중 SNS 로그인을 구현 할 때 JsonParser를 사용하게 되었는데 아래와 같이 JsonParser에 밑줄이 그어지면서 deprecated 되었다고 뜬다.
그래서 찾아보니 Gson 2.8.6부터는 JsonParser의 생성자와 parse() 메소드가 "중요도가 떨어져 더 이상 사용되지 않고 사라지게 될 기능"이라고 주의를 주고 있던 것이다. 대신 JsonParser.parseString() 메소드를 이용하여 Json 문자열을 parsing하고, JsonElement 객체를 리턴하는 방식을 사용하면 된다고 한다.
[Before]
String response = sb.toString();
JsonParser parser = new JsonParser();
JsonObject responseJson = parser.parse(response).getAsJsonObject();
access_token = responseJson.getAsJsonObject("response").get("access_token").getAsString();
[After]
JsonElement jsonElement = JsonParser.parseString(sb.toString());
JsonObject jsonObject = jsonElement.getAsJsonObject();
access_token = jsonObject.getAsJsonObject("response").get("access_token").getAsString();
System.out.println("Access Token: " + access_token);
- JsonElement jsonElement = JsonParser.parseString(sb.toString()) : Before에서 " String response = sb.toString() " 과정을 거쳤지만 여기서는 바로 "JsonParser.parseString(sb.toString())" 를 사용하여 JSON 문자열 파싱을 해준 후 jsonElement 객체에 담아준다.
- JsonObject jsonObject = jsonElement.getAsJsonObject() : JsonElement 객체를 JsonObject로 변환한다.
[더 간단히]
사실 더 간단하게 쓰면 아래와 같이 쓸 수가 있다. 근데 왜 위에 처럼 JsonElement 객체를 리턴하고 그걸 JsonObject로 변환해서 사용할까?
JsonElement jsonElement = JsonParser.parseString(sb.toString());
access_token = jsonElement.getAsJsonObject().getAsJsonObject("response").get("access_token").getAsString();
System.out.println("Access Token: " + access_token);
그 이유는, JsonElement는 다양한 종류의 JSON 데이터를 나타낼 수 있고, 구체적으로 어떤 유형의 JSON 데이터인지를 알 수 없기 때문이다. 즉, JSON 데이터가 객체 {} 형태인 경우, 해당 데이터를 추출하고 사용하기 위해 getAsJsonObject() 메서드를 사용하여 JsonElement를 JsonObject로 변환하여 필요한 데이터를 추출하여 사용하는 것이다.
'spring 스프링' 카테고리의 다른 글
Spring Boot 초기 데이터 설정 방법 정리(data.sql, schema.sql) (0) | 2023.08.09 |
---|---|
application.properties 의 값을 불러와 사용하기 (0) | 2023.08.07 |
[Spring boot] Rest Api + Vue.js를 이용한 SMTP 초 간단 이메일 인증 구현 (0) | 2023.06.23 |
Spring 과 Vue 의 작동 (0) | 2023.06.08 |
웹 스토리지 객체 localStorage와 sessionStorage (0) | 2023.05.25 |