[Spring Boot] JSON Serialization Error (No serializer found for class) - lombok 설치 - 게시판 웹

개요

프로젝트 실행 후 DB에서 글 목록을 불러오려하면 JSON Serialization Error가 발생했다. DTO에서 사용하는 lombok에서 getter/setter를 생성하지 못하는 것과 관련이 있어보였다. lombok 설치 후 getter/setter가 정상적으로 생성되는 것을 확인 후 오류를 해결했다.

이슈

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class

 

프로젝트 아카이브를 Eclipse에 import하고 실행해보니, 위와 같은 에러가 발생하며 DB 글 목록을 불러오지 못했다. 글 작성 기능(INSERT)까지 테스트해보니 DB와 접속 자체에서 에러가 발생한 것은 아니며, 에러 로그대로 데이터를 알맞게 바인딩하지 못하고 모두 Null 데이터가 되어있었다.

원인

DTO 클래스에서 lombok을 사용하고 있었는데, 사이드의 outline을 보니 getter/setter를 생성하지 못하는 것을 뒤늦게 확인했다. 컴파일 에러가 발생하지 않아서 lombok을 따로 설치하지 않았다는 것을 인식하지 못했다. lombok은 pom.xml을 통해 maven에서 lombok 라이브러리를 불러와도, 개별적으로 설치하여 IDE에 적용이 필요했다.

 

경과 및 해결

lombok 설치

lombok 다운로드 링크: https://projectlombok.org/download

 

Download

 

projectlombok.org

위 링크에서 다운로드를 클릭하여 lombok.jar 파일을 받는다. 그리고 해당파일을 IDE가 설치되어 있는 경로에 위치시킨다.

 

사진1. IDE 경로에 lombok.jar 삽입

 

이후 cmd를 이용해 해당 경로에 위치시켰던 lombok.jar를 실행하면 된다.

사진2. lombok.jar 실행

 

 java -jar lombok.jar

 

위 명령어를 통해 lombok.jar 파일을 실행하면 설치 화면이 나타난다.

사진3. 실행 시 경고화면

 

사진4. IDE를 찾아 등록한 후 설치화면

 

lombok.jar를 실행하면 사진3과 같이 경고창이 뜰 수 있는데, 그냥 무시하고 사진4의 화면에서 “Specify location”을 클릭하여 직접 lombok.jar를 위치시켰던 IDE 경로를 찾아 등록하면 된다.

이후 “Install/Update” 버튼을 클릭하면, 설치는 금방 끝나게된다.

이클립스 적용 확인

이후 이클립스 프로젝트로 돌아와, lombok이 적용되었는지 확인한다. 만약 설치 이후에도 outline에 getter/setter가 생성되지 않는다면,

  • IDE 재시작
  • project → clean
  • run as→ maven clean
  • Maven → Update project

무식한 방법이지만 위 목록의 방법들 중 어느 하나는 해결해 줄 것이다. 본인의 경우 IDE를 재시작한 후에 lombok이 적용되어 getter/setter가 생성되었지만 에러가 여전히 발생했다.

getter/setter가 생성되었음에도 DTO 클래스의 필드들이 노란 줄로 경고 메세지가 여전히 표시되어있었다. 아예 DTO 클래스의 모든 필드들을 삭제하고 다시 선언하니 경고 메세지도 사라지게 되었고 완전히 에러를 해결할 수 있었다. 이 모든 과정을 요약하면

  1. lombok 설치
  2. IDE 재시작 후 getter/setter 생성 확인
  3. lombok이 적용된 모든 필드 변수 삭제 후 재선언

 

이미지 참조

https://www.flaticon.com/kr/free-icon/chilli-pepper_5136942