[Spring, JPA] JSON으로 변환해서 반환하기

19·2022년 6월 29일
0

에러 모음

목록 보기
1/29
post-custom-banner

COCO 프로젝트 중에, 게시글의 상세정보를 JSON으로 변환해서 클라이언트로 반환(GET)하는 부분을 구현하다가 아래와 같은 문제가 발생했다.

구글링으로 해결했다.
https://velog.io/@youns1121/JPA-java.lang.IllegalStateException-Cannot-call-sendError-after-the-response-has-been-committed

서로 계속 참조되면서 무한루프에 빠졌던 것 같다.

양방향 매핑된 경우, JSON을 반환하는 API에서 엔티티를 반환 하게되면, 엔티티를 JSON으로 변환하는 과정에서 양방향 매핑된 필드를 반복적으로 출력하는 무한루프(순환참조문제)가 발생한다

이를 해결하기 위해 Dto를 만들고, 엔티티를 반환하는 대신 Dto를 반환해주는 것으로 문제를 해결했다.

  • 엔티티에 모든 값을 Dto에 옮겨담지 않고, 필요한 부분만 옮겨 사용하기 때문에 유지보수에 용이하다는 추가 장점도 있다!

예시 )

| PostController.java

@RestController
@RequiredArgsConstructor
public class PostController {

    ...
    @GetMapping("/post/list")
    public List<PostReadResponseDto> readPostList() {
        return postService.readPostList();
    }
    ...
}
  • List<Post>로 반환해주지 않고, Dto를 만들어 List<PostReadResponseDto>로 반환한다.
profile
하나씩 차근차근
post-custom-banner

0개의 댓글