https://steemit.com/kr-dev/@igna84/spring-security-preauthorize-postauthorize
2022-08-03 23:34:21.712 ERROR 8624 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.pingpong.backend.api.domain.TeacherEntity$HibernateProxy$lZY6BYZL["hibernateLazyInitializer"])] with root cause
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.pingpong.backend.api.domain.TeacherEntity$HibernateProxy$lZY6BYZL["hibernateLazyInitializer"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.13.3.jar:2.13.3]
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1300) ~[jackson-databind-2.13.3.jar:2.13.3]
1.다대일, 일대일 관계의 설정에서 no serializer 에러가 나는 경우 (Lazy → Eager)
엔티티 매핑 설정에서 fetch타입이 Lazy로 설정되어서 데이터가 아직 넘어오지 않았을 때 발생하는 에러이다. repository findby를 이용할때 발생되는 경우가 많다.
이러한 경우 해결방법이 3가지가 존재한다.
㉮ @JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}), @JsonIgnore 어노테이션을 통해서 오류나는 매핑 엔티티 설정 바꿔주기
㉯ LAZY설정된 엔티티를 EAGER로 바꿔서 가져오기
㉰ application 파일안에 spring.jackson.serialization.fail-on-empty-beans = false로 설정해주기
@OneToMany 연관관계에서는 기본적으로 Lazy Loading이 적용되기 때문에 lineRepository.findById(id)
로 조회할 경우, Line 테이블만 참조하여 데이터를 가져오고 Line에서 참조하는 Section은 프록시 객체로 생성합니다.
이후, Line Entity를 통해 getSections와 같이 직접 참조를 할 때에 실제로 Section 테이블을 조회하여 데이터를 채워넣게 됩니다.
자세한 설명은 여기 → https://dodop-blog.tistory.com/232