[ERROR] Cannot construct instance of (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

반응형

문제

Lombok 의 @Data@Builder 가 동시에 선언되어있는 클래스를 JacksonDeserialize 를 실패하며.. 
다음과 같은 에러가 발생한다. 

fail to retrieve #{Object} data - 
Type definition error: [simple type, class #{package.object}]; 
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Cannot construct instance of #{package.object} (no Creators, like default construct, exist): 
cannot deserialize from Object value (no delegate- or property-based Creator)

그결과 데이터가 정상적으로 Mapping 되지 않아 NPE 가 발생하고 있다. 

원인

Lombok 1.8.0 이상 버전부터
@Data 와 @Builder 를 동시에 사용할 경우 private 기본 생성자를 생성해주지 않도록 변경되어 발생하는 문제이다. 

해결

lombok 1.8.0 이상의 버전에서도.. @Data 와 @Builder 를 함께 사용하더라도
이전 버전들과 마찬가지로 private 기본 생성자를 생성하도록 강제하면된다. 

강제하는 방법은.. 다음과 같이 root 경로 아래에 lombok.config 파일을 생성하고 

파일에는 다음의 내용을 작성하면 된다. 

lombok.noargsconstructor.extraprivate = true

+ Lombok 의 version 별 변경내역은 이곳을 참고하면 된다.


반응형

댓글

Designed by JB FACTORY