일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 애니메이션
- MS-SQL
- Maui
- 파이어베이스
- 깃허브
- Firebase
- 바인딩
- 리엑트
- Animation
- typescript
- 플러터
- page
- Flutter
- db
- MVVM
- MSSQL
- spring boot
- JavaScript
- Binding
- 마우이
- listview
- 닷넷
- GitHub
- 오류
- React JS
- .NET
- HTML
- 함수
- 자바스크립트
- AnimationController
- Today
- Total
개발노트
8. [Spring Boot] @ManyToOne 무한재귀 호출 문제 해결하기 본문
Infinite recursion (무한 재귀)
무한 재귀, 이 오류는 객체 간에 서로 참조가 발생하여 끊임없이 서로를 호출하고 있기 때문에 발생합니다.
가장 흔한 이유는 Hibernate의 엔티티에 양방향 참조가 있을 때 발생합니다. 예를 들어, 두 개의 엔티티가 서로를 참조하고 있고 이 참조가 순환적으로 연결되어 있으면 무한 재귀가 발생할 수 있습니다.
이 문제를 해결하려면 다음과 같은 방법을 고려해 보세요:
- @JsonIgnore 애너테이션 사용: 엔티티 클래스의 일부 필드에 @JsonIgnore 애너테이션을 사용하여 해당 필드가 직렬화되지 않도록 만듭니다. 이 방법은 무한 재귀를 방지하는데 유용합니다.
@JsonIgnore private MixType mixType; - @JsonManagedReference 및 @JsonBackReference 사용: 양방향 참조 관계에서는 **@JsonManagedReference**와 **@JsonBackReference**를 사용하여 직렬화 시 참조 관계를 관리할 수 있습니다. **@JsonManagedReference**는 부모 엔티티의 직렬화를 관리하고, **@JsonBackReference**는 자식 엔티티의 직렬화를 관리합니다. @JsonManagedReference private MixType mixType;
- DTO 사용: 엔티티 대신 DTO(Data Transfer Object)를 사용하여 필요한 데이터만 직렬화할 수 있습니다. 이 방법은 데이터 전송에 효율적이고 안전합니다.
문제 발생
에러메세지
2024-04-30T14:58:16.484+09:00 WARN 1168 --- [api-server] [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Ignoring exception, response committed already: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)
2024-04-30T14:58:16.484+09:00 WARN 1168 --- [api-server] [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)]
해결방법:
@JsonIgnore 추가로 해결하기
@JsonIgnore 사용: 엔티티 클래스의 양방향 관계 중 하나의 방향을 직렬화에서 제외시키는 방법입니다. 주로 부모 엔티티에서 자식 엔티티를 제외할 때 사용합니다.
@ManyToOne 쪽에 추가
'서버 개발 > Spring Boot' 카테고리의 다른 글
10. [Spring Boot] Entity 관계 매핑하기(@ManyToOne, @OneToMnay) (0) | 2024.05.13 |
---|---|
9. [Spring Boot] 쿼리 메소드 (Repository 안의 메소드명에 따라 쿼리가 달라진다.) (0) | 2024.05.09 |
7. [Spring Boot] PropertyReferenceException 에러 해결 (Java "_" 언더바 인식 못함 문제) (0) | 2024.04.30 |
6. [Spring Boot] application.yml 설정하기 (0) | 2024.04.29 |
5. [Spring Boot] JPA 로 삽입, 조회, 수정, 삭제 기능 만들기(with ResponsEntity) (0) | 2024.04.16 |