Notice
Recent Posts
Recent Comments
Link
투케이2K
305. (TWOK/ERROR) [Android] 안드로이드 jackson - InvalidDefinitionException: Cannot construct deserialize 본문
투케이2K 에러관리
305. (TWOK/ERROR) [Android] 안드로이드 jackson - InvalidDefinitionException: Cannot construct deserialize
투케이2K 2025. 4. 23. 19:31[환경 설정 및 설명]
프로그램 : AndroidStudio
설 명 : [Android] 안드로이드 jackson - InvalidDefinitionException: Cannot construct deserialize
[설 명]
--------------------------------------------------------------------------
[개발 및 테스트 환경]
--------------------------------------------------------------------------
- 제목 : [Android] 안드로이드 jackson 라이브러리 InvalidDefinitionException: Cannot construct deserialize
- 테스트 환경 : 삼성 갤럭시 스마트폰 / 안드로이드 / Android
--------------------------------------------------------------------------
--------------------------------------------------------------------------
[에러 원인]
--------------------------------------------------------------------------
1. jackson 라이브러리 사용해 Json String 정보를 Class 매퍼 클래스로 deserialize 수행 시
클래스 구현 정보가 옳바르지 않아 발생하는 이슈
2. Class 내에 기본 Default Struct 클래스 생성자가 선언 되지 않아서 발생하는 이슈
3. 에러 발생 로그 전문 :
W/System.err: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.javaproject.M_Jackson_User` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
W/System.err: at [Source: (String)"{"userId":"TWOK123","userName":"투케이","userAge":30,"userAddr":["A","b"]}"; line: 1, column: 2]
W/System.err: at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1904)
W/System.err: at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400)
W/System.err: at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1349)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352)
W/System.err: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185)
W/System.err: at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
W/System.err: at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
W/System.err: at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629)
W/System.err: at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3597)
--------------------------------------------------------------------------
--------------------------------------------------------------------------
[해결 방법]
--------------------------------------------------------------------------
1. Class 클래스 구현 정보 수정 : Default Struct 클래스 생성자 선언 수행
2. Class 구현 예시 :
public class M_Jackson_User {
// ------------------------------------------------
// TODO [전역 변수 선언]
// ------------------------------------------------
private String userId; // [사용자 아이디]
private String userName; // [이름 이름]
private int userAge; // [사용자 나이]
private String[] userAddr; // [사용자 주소지]
// ------------------------------------------------
// TODO [클래스 생성자 초기화] : [Default]
// ------------------------------------------------
public M_Jackson_User() { }
// ------------------------------------------------
// TODO [클래스 생성자 초기화] : [Params]
// ------------------------------------------------
public M_Jackson_User(String userId, String userName, int userAge, String[] userAddr) {
this.userId = userId;
this.userName = userName;
this.userAge = userAge;
this.userAddr = userAddr;
}
// ------------------------------------------------
// TODO [Get 정의]
// ------------------------------------------------
public String getUserId() {
return userId;
}
public String getUserName() {
return userName;
}
public int getUserAge() {
return userAge;
}
public String[] getUserAddr() {
return userAddr;
}
// ------------------------------------------------
// TODO [Set 정의]
// ------------------------------------------------
public void setUserId(String userId) {
this.userId = userId;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public void setUserAddr(String[] userAddr) {
this.userAddr = userAddr;
}
} // TODO [클래스 종료]
3. ObjectMapper 사용해 Class 매핑 작업 예시 :
String jsonData = "{\"userAddr\":[\"A\",\"b\"],\"userAge\":30,\"userId\":\"TWOK123\",\"userName\":\"투케이\"}";
// [ObjectMapper 인스턴스 생성]
ObjectMapper objectMapper = new ObjectMapper();
// [JSON 문자열을 객체로 변환]
M_Jackson_User m_jackson_user = objectMapper.readValue(jsonData, M_Jackson_User.class);
--------------------------------------------------------------------------
--------------------------------------------------------------------------
[참고 사이트]
--------------------------------------------------------------------------
[Jackson 자바 Object to Json 변환 라이브러리]
https://blog.naver.com/kkh0977/223062394936?trackingCode=blog_bloghome_searchlist
[Jackson] 라이브러리 사용해 json to map 변환 실시
https://blog.naver.com/kkh0977/223074905826?trackingCode=blog_bloghome_searchlist
[간단 소스] Jackson 라이브러리 사용해 Class 클래스 정보 Json 변환 - ObjectMapper writeValueAsString
https://blog.naver.com/kkh0977/223841809345
--------------------------------------------------------------------------
반응형
'투케이2K 에러관리' 카테고리의 다른 글
Comments