에러 메시지
Resolved [org.springframework.http.converter.HttpMessageConversionException:
Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]]
fetch = FetchType.LAZY로 인한 JSON 반환 오류
게시글에 작성자 정보를 담기 위해 Notice 엔티티에 Member 엔티티를 반환시켰다.
하지만
public class Notice extends BaseEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Member member;
@Column(length = 200)
private String title;
@Column(columnDefinition = "MEDIUMTEXT")
private String content;
}
Member와 Notice는 1:N 관계이기 때문에
@ManyToOne(fetch = FetchType.LAZY) 어노테이션을 만들어줬고,
프록시는 복사본, 빈 객체이며, LAZY는 객체를 사용할 때 member가 로드 되기 때문에 member 정보가 출력되지 않았다.
NoticeDTO에서 MemberEntity 대신, MemberDTO를 반환하며 초기화 한다.
@Getter
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Schema(description = "공지사항 상세 조회 항목")
public class NoticeResponse {
@Schema(description = "공지사항 고유 식별 번호")
private Long id;
@Schema(description = "공지사항 작성자")
private MemberResponse member;
@Schema(description = "공지사항 제목")
private String title;
@Schema(description = "공지사항 내용")
private String content;
public static NoticeResponse of(Notice notice) {
return NoticeResponse.builder()
.id(notice.getId())
.member(MemberResponse.of(notice.getMember()))
.title(notice.getTitle())
.content(notice.getContent())
.build();
}
}