게시물 리스트 조회 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도 깔끔하게 응답하고
테스트도 문제없이 성공 할 수 있었다!
'Error' 카테고리의 다른 글
테스트 환경에서 Cookie를 다루거나 검증해야할때 (0) | 2023.12.08 |
---|---|
스프링 이미지 출력 문제 (0) | 2023.10.06 |
독립적인 테스트 환경 구성하기 (0) | 2023.09.13 |
fetch API 사용 과 DTO의 기본생성자 Issue (0) | 2023.08.31 |
LazyInitializationException (0) | 2023.08.12 |