여러가지 작업을 같이 하다가 (리팩토링 + 모듈 추가 작업)
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);