본문 바로가기
Java/JPA with Error

[해결 방법] org.springframework.http.converter.HttpMessageNotWritableException

by HJ0216 2023. 6. 18.

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

SpringBoot의 MainApplication에서 양방향 참조 관계가 있는 Entity의 데이터를 호출할 경우,

🚨 다음과 같은 Error 발생

org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)

 

 

발생 원인

Entity 객체간 양방향 참조관계가 있을 경우,  엔티티를 반환하여 JSON으로 변경할 경우, serialize(직렬화) 과정을 거치는데, 이때 객체간 상호 참조를 통해 무한 재귀 발생

 

 

해결 방법

1. 양방향 참조 관계의 필드에 @JsonIgnore 선언

🚨 해당 필드값이 null값으로 세팅되어 JSON으로 출력되지 않음

2. 부모 클래스측에 @JsonManagedReference를, 자식측에 @JsonBackReference를 Annotation에 추가

@JsonManagedReference
: 참조가 되는 앞부분을 의미, 정상적으로 직렬화를 수행
@JsonBackReference
: 참조가 되는 뒷부분을 의미, 직렬화를 수행하지 않음

3. Entity 대신 DTO를 만들어 return

 

 

 

참고 자료

 

[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

 

JPA에서 순환참조를 해결하는 방법 | @JsonIgnore, @JsonManagedReference, @JsonBackReference

JPA는 ORM이기 때문에 RDB를 관리하는데 있어서 양방향 참조를 필요로 한다. 물론 필수는 아니지만 Entity는 본질적인 데이터를 표현하는 것이기 때문에 그 관계에 대하여 명세해주는 것이 원칙이라

binarycube.tistory.com

 

20190720 [문제해결] Infinite recursion (StackOverflowError)

JPA 엔티티, JSON 변환 에러 org.springframework.http.converter.HttpMessageNotWritableException Could not write JSON Infinite recursion (StackOverflowError) nested exception is com.fasterxml.jackson.databind.JsonMappingException 원인 JPA 연관관

pasudo123.tistory.com