여느 때와 같이 DTO를 생성하여 조회 기능을 구현하던 중, 다음과 같은 에러를 만나게 되었다.
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
No serializer found for class com. ... a
nd no properties discovered to create BeanSerializer
(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
(through reference chain: ...)
기본적으로 Jackson 2.X 버전에서 public 필드 또는 getter 메소드가 존재하는 필드에만 동작하게 되어있다. 즉, 저 오류가 떴다는 것은 private 필드에 대한 getter 메소드가 없는 경우를 의미한다. 아래와 같은 경우를 의미한다.
ex)
class Temp {
private Long id;
private String name;
public Temp(Long id, String name) {
this.id = id;
this.name = name;
}
}
private 필드에 대한 Getter를 생성해준다.
또한, 여기(오류 해결 시 참고한 블로그) 에 다양한 해결 방법이 있다. 하지만 private 필드 + Getter 사용 조합을 하지 않는 이상 필드를 public으로 두겠다는 이야기가 되므로 개인적으로는 Getter를 붙여주는 것이 가장 좋은 방법인 것 같다.
Spring Data Jdbc로 삽질하다가 같은 에러가 발생했는데 덕분에 해결했습니다
감사합니다!