JsonMappingException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl :: 소림사의 홍반장!

여러가지 작업을 같이 하다가 (리팩토링 + 모듈 추가 작업)


JsonMappingException: No serializer found for class org.apache.ibatis.executor.loader.javassist.JavassistProxyFactory$EnhancedResultObjectProxyImpl

Contents 엔터티를 조회해서 뿌려주는 controller result 값 대신 이런 에러가 발생했다. 


작업한 부분과는 전혀 관계가 없어보이는데 뭐가 문제일까...


모듈을 추가하면서 라이브러리 버전이 충돌하여 생긴 문제인 줄 알고 한참을 삽질했는데...


아뿔사.. 리팩토링은 진행하면서 기존에 세팅되어 있던 다음과 같은 mybatis 세팅이 Controller가 위치한 패키지에 적용이 된 것이었다.


<settings>
        <setting name="lazyLoadingEnabled" value="true"/>

lazyLoading으로 handler property 값이 null인게 저런 오류를 내뿜었던 것이다.


그래서 해결책은 여러가지가 있는데 



하나는 serialize 시 handler property를 무시하도록 해당 객체(class 상단)에 annotation 추가해주는 것


@JsonIgnoreProperties(value = {"handler"})


요렇게 추가해주는 것,



다른 하나는


serialization 세팅을 변경 해주는 것


spring-boot 경우는 이런식으로 property 값을 세팅해줘도 되고


spring.jackson.serialization.fail-on-empty-beans=false


objectMapper 세팅시에


For Jackson 1.9

myObjectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

For Jackson 2.X

myObjectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

요런식으로 설정값을 추가해줘도 된다.



objectMapper 를 상속받아서 custom objectMapper를 사용하는 중이라면


생성자에 다음과 같은 설정을 해준다.

configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);




다른 카테고리의 글 목록

삽질방지 팁 카테고리의 포스트를 톺아봅니다