[troubleShooting, Spring] Internal error - Type definition error(Response Getter, JPA, Fetch Lazy Loding, Entity to DTO 반환중 Type Error)Project/(공통)troubleshooting2023. 8. 18. 17:22
Table of Contents
💡 JPA Lazy Loding관련 오류인줄 알았으나, Dto 적용시 Response에 @Getter를 생성해주지 않아 발생한 문제였다.
에러코드
"Internal error - Type definition error: [simple type, class wanted.preonboarding.backend.post.dto.PostResponse] \n cause : com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class wanted.preonboarding.backend.post.dto.PostResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])"
핵심 요점
- 게시글 목록 열람 API 개발 도중 Type definition 에러를 확인하였고, JPA 의 1:다 엔티티 매핑의 Fetch Lazy Loding 관련 이슈인줄 알고 @JsonIgnore 어노테이션과 Hibernate.initialize(post.getAuthor()) 등을 시도하였으나 문제가 해결되지 않았다.
- JPA 관련 오류의 경우 지연로딩에 의한 오류였는데, 나는 해당 오류들을 방지하기 위해 DTO를 도입하였는데도 에러가 발생했기에 이해가 잘 되지 않았다...(당연하지 바보야)
- 추가적인 해결방법을 찾아보려다가, 디버깅 중 Controller에서 값을 반환하던 곳까지 무사히 dto에 값이 담겨서 전달되었던것을 확인하였고.. DTO 객체가 생성까지는 되지만 모종의 이유로 JSON 화 되지 못하고있는것이라 추측하고 DTO 파일을 다시 살폈다.
- 그 결과, Response 객체에 @Getter를 생성해주지 않았다는점을 발견하였고 Getter가 없기때문에 값을 가져오지 못해 response에 제대로 값을 담을 수 없어 발생하던 Type defenition error임을 확인하였다.
해결방안
간단하게, response 에 Getter를 추가해줌으로써 문제가 해결되었다
'Project > (공통)troubleshooting' 카테고리의 다른 글
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!