TIL 20240104(오류 발생) Could not write JSON: Infinite recursion
엔티티끼리 연관을 지어주려고 했는데 이런 오류가 생겼다.. 변수명을 수정하다보니 생긴 오류인데,, 처음 보는 오류인지라 당황했고 찾아보았다.
엔티티를 JSON으로 변경하는 중 serialize(직렬화) 과정을 거치는데, 이때 todos에 comments가 있으니까 comments를 참조하고, comments에 있는 todos를 참조하면서 무한 재귀가 발생하는 것이라고 한다.
즉, Json 라이브러리에서 Client JSONObject를 만드는 도중 이들이 무한 반복하는 것이다.
이런 무한반복을 해결하기 위해선 서로 계속 조회하는 굴레를 끊어줘야 하는데,
@JsonIgnore 어노테이션을 추가했다.
@JsonIgnore
@OneToMany(mappedBy = "todo", fetch = FetchType.LAZY, cascade = [CascadeType.ALL], orphanRemoval = true)
val comment: MutableList<Comments> = mutableListOf()
추가한 후 실행된 결과이다.. 잘 되는 것을 볼 수 있다!
자바 같은 경우는 getter를 별도로 생성해주고 어노테이션을 추가하는 방법을 쓰던데,
아래의 블로그에 보면 이런 방법도 있구나 ~ 를 알 수 있었다.
https://ahn3330.tistory.com/164
[JPA] 스프링부트 Could not write JSON: Infinite recursion 에러 해결
에러 내용 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recur
ahn3330.tistory.com
음.. 뭐 이번 같은 경우 어노테이션만 추가해도 잘 실행되었다.. 혹시라도 틀릴 수 있으니 추후에 찾아봐야겠다!
새해 첫날부터 일이 있어서 3일내내 장례식장에 있는 바람에 개발일지를 못쓰고 과제도 제대로 참여못했는데... 앞으로 잘 쓰도록 하자! 우선 오늘 시도하다가 생긴 에러이니까 이런 경우도 있구나 정도로 숙지하고 다음에도 이런 일이 발생했을 때 참고하도록 하자.