[JPA] DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of ~~ 에러

현주·2023년 1월 15일
0

Trouble Shooting

목록 보기
21/31
post-custom-banner

🔥 문제

프로젝트를 진행하던 중, 기본 구조들을 만들어놓고 잘 돌아가는지 확인을 위해

실행을 시켰는데 아래와 같은 에러가 나왔다!

자세히 보면 아래와 같다.

2023-01-10 23:08:20.969 WARN 31776 --- [Test worker] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of com.yata.backend.domain.yata.dto.YataRequestDto$InvitationPost (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.yata.backend.domain.yata.dto.YataRequestDto$InvitationPost (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]]

위의 에러 코드를 읽어보면,

하나 이상의 creator가 존재하지만 object 값에서 역직렬화를 할 수 없다 ..?

이게 무슨 말인가 싶으니 바로 구글링 ,,


💡 원인

원인은 jackson library가 빈 생성자가 없는 모델을 생성하는 방법을 모르기 때문

Entity의 클래스 레벨에 따로 빈 생성자를 추가해주어야한다고 한다!

전에는 빈 생성자 안만들면 Entity에서 빨간 줄로 에러났다고 보여줬었는데 뭐쥐 ?


☘️ 해결

그래서 Entity의 클래스 레벨에 @NoArgsConstructor를 추가해주었더니

에러 해결 완 ~

[ 참고 ] https://stackoverflow.com/questions/53191468/no-creators-like-default-construct-exist-cannot-deserialize-from-object-valu


🍯 꿀팁

참고로 @NoArgsConstructor@AllArgsConstructor를 동시에 쓸 경우에

@AllArgsConstructor를 먼저 쓰고 그 밑에 @NoArgsConstructor를 써주어야 한다.

어떤 생성자를 먼저 만드냐에 따라 에러의 유무를 결정할 수 있으니 주의하기 !!

⚠️ 그런데 @AllArgsConstructor@RequiredArgsConstructor는 사용하지 않는 게 좋다고 한다.

이 애너테이션을 붙여 생성자들이 만들어진 이후에 필드 순서를 바꾸게 되면,
이 리팩토링이 작동하지 않고 lombok이 개발자도 인식하지 못하는 사이에 생성자의 파라미터 순서를 필드 선언 순서에 맞춰 원래대로 바꾼다고 한다!

만약 이 순서를 바꿨던 두 필드가 동일한 Type이라면,
애플리케이션 실행 시 에러는 나지 않지만 값이 바뀌어 들어가기 때문에 주의해야한다.

[ 참고 ] https://kwonnam.pe.kr/wiki/java/lombok/pitfall

post-custom-banner

0개의 댓글