본문 바로가기
Back-End/Spring

TIL 230630 : (이어서) Entity반환시 문제. (Dto의 중요성)

by 우인입니다 2023. 6. 30.

https://thiswooin.tistory.com/39

 

TIL 230629 : List to JSON 객체 반환시 오류 (jackson)

오늘도 어김없이 이해할 수 없는 타이밍에 찾아오는 오류. 단순히 GET메소드로 포스트ResponseDto를 객체로 리턴받는 건데, 하나하나 할때는 되는데 전체를 하면 안 된다. 유독 13번 Post만 GET이 안된

thiswooin.tistory.com

처음으로, 해결 못 하고 TIL을 마쳤던 어제의 오류, 아침부터 다른 방법들로 시도해보고 했는데 겨우 해결했다....


문제

Post에는 Reply가 OneToMany로 List의 형태로 담겨있다.

 

 

PostResponseDto에도 List<Reply>를 추가했다.

 

결과적으로, Reply가 있는 Post를 Client에 반환하면 오류가 났다.

 

 

시도한 방법

1. List를 Json으로 직접 문자열로 변경해서 보내보려 함. Jackson의 ObjectMapper / GSON / JSONObject  모두 실패

2. toString으로 바로 직접 바꿔보려함 -> String 참조값만 나온다. (오버로딩하면 되기도 하겠지만 뭔가 돌아가는 것 같아 포기)

3. List가 아닌 ArrayList로 변환해보기 -> 근본적인 문제가 해결되지 않음.

 

 

해결 방법

Entity를 직접 반환하면 안된다!

List<Reply> -> List<ReplyResponseDto>로 변환해서 전달해줌.

 

 

 

1. 기본적으로 List도 선언만한 멤버에 ArrayList로 생성해줬다.

 

2. ReplyResponseDto를 만든 뒤, 해당 생성자를 사용해 PostResponseDto 생성자를 수정했다.

반복하며 각각의 Reply 객체를 이용해 ReplyResponseDto로 변환하며 추가

 

3. 결과

Post 안에 Reply가 통째로 들어가고, 그 객체들은 전부 JSON형태로 변환된다.

저거 보고 울뻔함

 

 

 

 

배운 점

여러 블로그에서 뒤늦게나마 무한루프나 Entity를 직접 반환했을 때의 주의점에 대해 배웠다.

제대로 틀려서 덕분에 하나 배웠다.

 

감사합니다 선배님들!