본문 바로가기

SpringBoot

스프링부트 HttpMessageNotReadableException: JSON parse error: Cannot construct instance 에러

앱-스프링부트 간 API를 주고받으며 아래와 같은 에러가 발생했다.

 

앱 사이드:

D/OkHttp: {"timestamp":"2022-07-29T05:03:15.315+00:00","status":400,"error":"Bad Request","message":"","path":"/api/match"}

retrofit2.HttpException: HTTP 400 

 

서버 사이드:

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.randomchat.request.MatchRequest` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.randomchat.request.MatchRequest` (although at least one Creator exists)

 

 

HTTP 400 에러. 찾아보니, Bad Request 에러. 요청이 잘못되었나 보다.

처음엔 앱 사이드와 서버 사이드의 Request 클래스의 패키지명이 달라서 생기는 문제인 줄 알았다.

그래서 패키지명을 동일하게 맞췄지만, 실패.

 

예전에도 사용했던 스프링부트, 레트로핏 구조인데 왜 그러지??

찾아보니,

 

해결방법:

서버 사이드의 Request 클래스에 기본 생성자가 없으면 Jackson Library가 에러를 일으킨다고 함 -_-;;;

그래서 data class 형태였던 Request를 굳~~이 빈 construct()까지 넣어주면서 해결했다.

 

Primary Constructor를 넣음. 이런 에러가 발생하는 이유를 묻고 다니고는 있는데 아는 사람도 찾기 힘들다..