반응형
⌗ 오류 현상
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Can not construct instance of com.batch.dto.Summary: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.batch.dto.Summary
: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
at [Source: java.io.PushbackInputStream@5fa9247b; line: 1, column: 58] (through reference chain: com.framework.ResponseObject["data"]->com.batch.dto.Summary["in"])
- com.batch.dto.Summary 파일에 정상적으로 맵핑되어 나와 return 되어야할 데이터
{
"data": {
"searchDate": "2019-11-06 11:02:52",
"in": {
"totalCnt": 66,
"cntForPc": 43,
"cntForMobile": 23
},
"result": {
"totalCnt": 42,
"successCnt": 39,
"failCnt": 3
},
"out": {
"totalCnt": 34,
"successCnt": 10,
"failCnt": 24
}
"cIn": 10,
"cOut": {
"totalCnt": 10,
"successCnt": 9,
"failCnt": 1
}
}
}
⌗ 해결 방법
ResourceClient 를 통해 통신 받은 Json 데이터가 정상적으로 맵핑되지 않아 발생한 현상으로,
ObjectMapper 를 통해서 Json을 파싱을 하면 Object 정상적으로 담을 수 있다.
private void getSummary (String searchDate) {
try {
ResponseObject responseObject = resourceClient.getForResponseObject(...);
ObjectMapper om = new ObjectMapper();
Summary summary = om.convertValue(responseObject.getData(), new TypeReference<Summary>() {});
} catch (Exception e) {
log.error(e.getMessage());
}
}
밑에 참고 내용 중에는 DTO Data를 static class으로 적용해서 해결한 방법이 있으나,
이유없이 서버 내에 static class를 많이 생성해두는 것은 리소스 낭비라고 생각하여 필자는 로직단으로 풀어봤다..😅
[참고]
stackoverflow.com/questions/22358872/how-to-convert-linkedhashmap-to-custom-java-object/22359030
반응형