Notice
Recent Posts
Recent Comments
Link
투케이2K
163. (TWOK/WORK) [개발 요청] Gson 사용해 API 호출 후 클래스 매핑 및 JSON 전송 시 특정 값 제거 요청 - Expose null JSON 생성 예외 처리 본문
투케이2K 업무정리
163. (TWOK/WORK) [개발 요청] Gson 사용해 API 호출 후 클래스 매핑 및 JSON 전송 시 특정 값 제거 요청 - Expose null JSON 생성 예외 처리
투케이2K 2025. 6. 1. 09:47[제 목]
[개발 요청] Gson 사용해 API 호출 후 클래스 매핑 및 JSON 전송 시 특정 값 제거 요청 - Expose null JSON 생성 예외 처리
[내 용]
------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------
- 제목 : [개발 요청] Gson 사용해 API 호출 후 클래스 매핑 및 JSON 전송 시 특정 값 제거 요청 - Expose null JSON 생성 예외 처리
- 테스트 환경 : 삼성 갤럭시 스마트폰
- 사전 안드로이드 Gradle Gson 의존성 부여 코드 :
implementation 'com.google.code.gson:gson:2.8.6'
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[개선 요청 사항]
------------------------------------------------------------------------------
1. 안드로이드에서 특정 API 호출 후 공통 Model 모델 클래스를 사용해 Response JSON 파싱 및 Request 요청을 수행하는데
Request 전송 시 특정 JSON 파라미터 값 미사용으로 제거 요청
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------
1. 특정 API 호출 수행 및 Respones 응답 JSON 데이터 Model 클래스에 매핑 수행
2. Gson 사용해 Model 클래스 JSON 형태로 변환 후 API Body 부분에 전송 수행
3. Request Body 부분에 불필요한 파라미터 포함되어 전송 되는 것 확인
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------
1. Gson Model 클래스에서 null 값이 변수 JSON 생성 시 예외 처리 되도록 Expose 처리 수행
>> @SerializedName("key_note") @Expose public Note note;
>> SerializedName : JSON 생성 시 지정 되는 Key 명칭
2. 변경 된 기능 로직 확인 :
>> 특정 API 호출 수행 및 Respones 응답 JSON 데이터 Model 클래스에 매핑 수행 (이때, 장치에서는 Model 클래스에서 정의 되어 있지 않은 값도 전송 함)
>> Gson 사용해 매핑 된 Model 클래스 Json 데이터로 생성 수행 및 다른 API 호출 시 Body 에 데이터 추가 실시
- 전송을 원하지 않는 데이터는 Model 클래스에서 변수 값 null 초기화 설정 (Expose 에서 예외 처리 되도록 null 지정)
>> API 호출 Body 부분에 필요한 데이터만 전송 되는 것 확인
3. Gson 사용해 클래스 매핑 및 JSON 생성 참고 코드 :
// TODO [Json Key 값은 Model 클래스에 선언 된 SerializedName 사용]
// TODO [Json To Model]
String sampleJson = "{\n" +
" \"key_name\": \"TWOK\",\n" +
" \"key_age\": 29\n" +
"}";
M_Person m_person = new Gson().fromJson(sampleJson, M_Person.class);
S_Log._W_("Json To Model", new String[]{
"name :: " + String.valueOf(m_person.name),
"age :: " + String.valueOf(m_person.age),
"note :: " + String.valueOf(m_person.note),
"items :: " + String.valueOf(m_person.items),
});
// TODO [Model To Json]
String jsonString = new Gson().toJson(m_person);
S_Log._W_("Model To Json", new String[]{
"jsonString :: " + String.valueOf(jsonString)
});
4. Model 클래스 샘플 소스 코드 :
package com.example.javaproject.C_Annotation;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class M_Person {
/**
* // --------------------------------------------------------------------------------------
* TODO [클래스 설명]
* // --------------------------------------------------------------------------------------
* 1. GSON 모델 클래스
* // --------------------------------------------------------------------------------------
* 2. @SerializedName : JSON 객체 생성 시 표시될 key name
* // --------------------------------------------------------------------------------------
* 3. @Expose : 데이터가 null 일 경우 json 생성 시 제외 설정
* // --------------------------------------------------------------------------------------
* 4. build.gradle 설정 :
*
* implementation 'com.google.code.gson:gson:2.8.6'
* // --------------------------------------------------------------------------------------
* */
// -----------------------------------------------------------------------------------------
// TODO [전역 변수 선언]
// -----------------------------------------------------------------------------------------
private static final String ACTIVITY_NAME = "M_Person";
// -----------------------------------------------------------------------------------------
// TODO [클래스 생성자 초기화]
// -----------------------------------------------------------------------------------------
public M_Person(String name, int age, Note note, ArrayList<Item> items){
this.name = name;
this.age = age;
this.note = note;
this.items = items;
}
// -----------------------------------------------------------------------------------------
// TODO [JSON KEY DATA]
// -----------------------------------------------------------------------------------------
// [JSON KEY]
@SerializedName("key_name") public String name;
// -------------------------------------------
// [JSON KEY]
@SerializedName("key_age") public int age;
// -------------------------------------------
// [JSON KEY] : Expose
@SerializedName("key_note") @Expose public Note note;
// -------------------------------------------
// [JSON KEY] : Expose
@SerializedName("key_item") @Expose public ArrayList<Item> items;
// -------------------------------------------
// [JSON OBJECT]
public static class Note {
public Note(String blog){
this.blog = blog;
}
@SerializedName("key_blog") public String blog;
}
// -------------------------------------------
// [JSON ARRAY]
public static class Item {
public Item(String lang, String tool){
this.lang = lang;
this.tool = tool;
}
@SerializedName("key_lang") public String lang;
@SerializedName("key_tool") public String tool;
}
// -------------------------------------------
} // TODO [클래스 종료]
W///===========//: ======================================================================
I/: [LOG :: DESCRIPTION :: Json To Model]
I/: ----------------------------------------------------
I/: [LOG :: name :: TWOK]
I/: ----------------------------------------------------
I/: [LOG :: age :: 29]
I/: ----------------------------------------------------
I/: [LOG :: note :: null]
I/: ----------------------------------------------------
I/: [LOG :: items :: null]
W///===========//: ======================================================================
W///===========//: ======================================================================
I/: [LOG :: DESCRIPTION :: Model To Json]
I/: ----------------------------------------------------
I/: [LOG :: jsonString :: {"key_age":29,"key_name":"TWOK"}]
W///===========//: ======================================================================
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------
[[GSON] SerializedName 사용해 모델 클래스 JsonObject , JsonArray 생성]
https://blog.naver.com/kkh0977/223027622493?trackingCode=blog_bloghome_searchlist
[[GSON] SerializedName 사용해 모델 클래스 생성 및 response 데이터 자동 파싱 수행 실시]
https://blog.naver.com/kkh0977/223027624556?trackingCode=blog_bloghome_searchlist
[GSON 사용해 VO 클래스 객체 매핑 및 JSON 생성 , 파싱 수행 실시]
https://blog.naver.com/kkh0977/222676375642?trackingCode=blog_bloghome_searchlist
[[GSON] SerializedName , Expose 사용해 모델 클래스 null 널 데이터 제외 JsonObject 생성]
https://blog.naver.com/kkh0977/223026741585?trackingCode=blog_bloghome_searchlist
------------------------------------------------------------------------------
반응형
'투케이2K 업무정리' 카테고리의 다른 글
Comments