본문 바로가기

Issue

[Java] JSON parse error 오류 해결

반응형

⌗ 오류 현상


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

 

how to convert LinkedHashMap to Custom java object?

I'm trying to get the data from one app to another via RESTful WS and it works, but I cannot use this data since I cannot cast it... WS returns a List of objects like this: {id=1, forename=John, s...

stackoverflow.com

 

brocess.tistory.com/150

 

[ Spring ] 문제해결 no suitable constructor found, can not deserialize from Object value

[ Spring ] 문제해결 no suitable constructor found, can not deserialize from Object value API로 JSON 데이터 받아와 모델에 매핑시키는 부분에서 다음과 같은 에러가 발생하였다. org.springframework.http.c..

brocess.tistory.com

 

반응형

❥ CHATI Github