728x90
반응형
JPA Infinite Recursion
JPA를 활용하여 양방향 매핑을 선언했을 때 아래와 같은 에러가 발생할 수 있다.
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion
컨트롤러에서 JSON 형태로 값을 출력할 때, 타입 변환이 필요하다. 이때 변환해야하는 엔티티의 필드가 다른 엔티티와 매핑 관계로 연결되어있다면 참조를 진행한다. 그리고, 이 연결된 엔티티에서도 함께 연결된 기존의 엔티티를 다시 참조하게 되면서 Infinite Recursion에 빠지는 것이다.
따라서 이를 해결하기 위해선, 양방향 매핑을 선언한 필드에 직렬화와 관련된 어노테이션을 각각 선언해줘야 한다.
@JsonManagedReference // 추가한 부분
@OneToMany(mappedBy = "user")
private List<Post> posts = new ArrayList<>();
@JsonBackReference // 추가한 부분
@ManyToOne
private User user;
@JsonManagedReference
: 정상적으로 직렬화를 수행하는 부분 →@OneToMany
에 사용@JsonBackReference
: 직렬화를 수행하지 않는 부분 →@ManyToOne
에 사용
728x90
반응형
'스프링(Spring)' 카테고리의 다른 글
[Spring Boot] CORS 설정 시 addCorsMappings 관련 에러 (4) | 2021.11.18 |
---|---|
Lombok 사용 시 주의할 점 (0) | 2021.11.04 |
[Spring Data JPA] 더티 체킹 (Dirty Checking) (0) | 2021.09.13 |
[Spring Boot] Test Code (0) | 2021.08.23 |
[Spring Boot] SpringApplication (0) | 2021.08.22 |