인프런 커뮤니티 질문&답변

nahyeon.in11님의 프로필 이미지
nahyeon.in11

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V2: 엔티티를 DTO로 변환

v2에서 No serializer found for class ~ 문제가 발생합니다.

작성

·

673

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

DTO로 변환을 해줬는데 왜 이러한 문제점이 발생하는지 잘 모르겠습니다. 감사합니다.

[OrderDto]

스크린샷 2023-09-13 오전 10.20.00.png

[log]

스크린샷 2023-09-13 오전 10.20.19.png

소스압축파일

https://drive.google.com/file/d/1Kb9yLRF3-AkxyBlvC8Aum_3gumKI21Ol/view?usp=sharing

답변 2

0

nahyeon.in11님의 프로필 이미지
nahyeon.in11
질문자

안녕하세요! 답변 감사합니다.

말씀해주신대로 OrderItemDto를 만들어 변환시켜줬더니 정상적으로 동작하는 것을 확인했습니다.

다만 강의에서는 이전과 같이 (OrderItemDto 변경 전) 작성했을 경우 에러가 아닌 orderItems = null (지연로딩) 로 나옵니다.

 

강의에서처럼 null이 아닌 에러가 나오는 원인이 궁금합니다!

찾아보니 JSON 변환 과정에서 문제가 발생해 생기는 에러라고 하는데 만약 맞다면 코드의 어느부분에서 문제가 생기는 것인지 모르겠습니다.

[강의 코드] - OrderItemDto로 변경전

[강의 상의 결과]

[소스코드 - OrderItemDto 변경 후]

https://drive.google.com/file/d/1VUlSOGTbq35Fgp_dnt2s_H3wtAA7j8WK/view?usp=sharing

 

감사합니다!

보내주신 코드 잘 살펴봤습니다.

먼저 처음에 질문 주신 OrderDto 상태로 변경하여 동일한 오류가 발생하는 것을 확인했습니다 :)

image

원인을 찾아보니 하이버네이트 프록시 객체와 json 변환을 도와주는 Hibernate5Module이 설치되어있지 않았습니다.

image

스프링 부트 3.0 이상은 Hibernate5JakartaModule 을 등록해야 합니다!

image가이드대로 추가해주시고 다시 호출해주시면

image

다음과 같이 강의와 동일하게 결과가 나오게 됩니다!

말씀하신 것처럼 원인은 jackson 라이브러리가 프록시 객체를 json으로 변환하는 과정에서 일어나는 것이고, 자세한 설명은 Hibernate5Module을 처음 추가하는

간단한 주문 조회 V1 : 엔티티를 직접 노출 의 강의 자료와 영상을 참고해주십쇼!

nahyeon.in11님의 프로필 이미지
nahyeon.in11
질문자

자세한 설명과 답변 정말 감사합니다!

0

안녕하세요. nahyeon.in11님, 공식 서포터즈 y2gcoder입니다.

먼저 프로젝트 파일을 보면 시간이 더 걸릴 것 같아 보여주신 캡처에서 보이는 것부터 말씀드리려고 합니다. 말씀드린 부분부터 고쳐보시고 마찬가지로 예외가 발생한다면 말씀해주십쇼!

캡처를 보니 강의자료와 다른 부분이 보입니다. 강의자료에서는 Order만 DTO로 바꾸는 것이 아니라 OrderItem도 OrderItemDto로 변환해주고 있습니다. 해당 에러도 그쪽과 관련되어 나는 것으로 보이므로 OrderItemDto를 만들어 OrderItemDto로 변환해주시고 다시 시도해보시겠습니까?

강의자료 p.23 ~ 24쪽을 참고해주십쇼! 

감사합니다.

nahyeon.in11님의 프로필 이미지
nahyeon.in11

작성한 질문수

질문하기