Error
JPA 양방향 참조관계 무한 루프 [Infinite recursion]
kkkkkdddddhhhhh
2023. 8. 12. 18:08
게시물 리스트 조회 API테스트중 말로만 듣던 양방향 참조 무한루프에 빠졌다....
해결 방안으로 DTO 사용과 Jackson Annotaion 활용 두 가지가 있었는데
Jackson Annotaion 활용 방안으로
- @JsonManagedReference와 @JsonBackReference 가 존재한다.
어노테이션을 활용하는 방안보다 DTO로 응답하는것이 더 코드가 깔끔하고 최선의 방법이라 생각해 DTO를 활용하는것으로 고민을 했는데
?? 난 이미 컨트롤러에서 DTO로 응답하고 있었는데....
@GetMapping("/api/todolist")
public ResponseEntity<List<TodoListViewDTO>> getTodoList(){
List<TodoListViewDTO> todoList = todoBoardService.getTodoList().stream().map(TodoListViewDTO::new).toList();
return ResponseEntity.ok().body(todoList);
}
public ResponseEntity<List<TodoListViewDTO>> getTodoList(){
List<TodoListViewDTO> todoList = todoBoardService.getTodoList().stream().map(TodoListViewDTO::new).toList();
return ResponseEntity.ok().body(todoList);
}
뭐가 잘못된건지 고민을 하다 DTO Class 에서 Entitiy를 DTO로 변환하는 과정에서 큰 결함을 발견했다...
Member 값을 DTO를 변환하면서 Member를 참조할 수 밖에 없는 코드였다....
그래서..
멤버를 DTO로 변환할때에 멤버 Entity에서 아이디만 받아 DTO로 변환하고 ->
type을 String으로 수정하고 dto를 응답하는 식으로 DTO Class를 수정했더니....
응답 JSON도 깔끔하게 응답하고
테스트도 문제없이 성공 할 수 있었다!