본문 바로가기

소프트웨어-이야기/프로그래밍 언어와 프레임워크

Lombok 기본 생성자와 Getter/Builder 어노테이션

@Getter
@Builder
public class AddItemToCartCommand {
    private final Long userId;
    private final Long productId;
    private final Integer quantity;
}

 

Request DTO에 Getter, Builder 어노테이션만 추가하면, 다음과 같은 에러를 보게 되는 경우가 있다. 

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

 

이번주에도 이 에러를 보게 되었다. 낯설지 않아서, 에러 노트를 확인해보니 올해에만 누적 3번 삽질했던 문제였다. 

코드 중복도 3번이면, 함수 추출을 해야한다는 말이 있다.  3번이면 문제를 제대로 집고 넘어가야겠다.


해결 방법

- Lombok을 사용하려면 매개변수가 없는 기본 생성자가 필요하다.

- lombok.config 파일을 만든 후, 다음과 같은 설정을 추가하면 롬복에서 @Value, @Data을 쓸때 private 범위로 매개변수가 없는 기본 생성자를 만들어준다. 

lombok.noargsconstructor.extraprivate = true

이 방법을 안하려면, dto 클래스에 json creator 등을 명시하거나, 매개변수가 없는 기본 생성자를 만들거나, @NoargsConstructor 어노테이션을 추가해주면 된다. 

 

그래도 안된다면?

문제의 시작은 기본 생성자이다. 다 잘했는데 안된다면, lombok.config 설정 파일이 잘못된 경로에 추가되어있다거나, 뭔가 누락된거다. 기본 생성자가 채워지는 곳이 누락된건 없을지 다시 살펴보자. 

 

참고

https://minholee93.tistory.com/entry/ERROR-Cannot-construct-instance-of-no-Creators-like-default-construct-exist-cannot-deserialize-from-Object-value-no-delegate-or-property-based-Creator

 

[ERROR] Cannot construct instance of (no Creators, like default construct, exist): cannot deserialize from Object value (no dele

문제 Lombok 의 @Data 와 @Builder 가 동시에 선언되어있는 클래스를 Jackson이 Deserialize 를 실패하며.. 다음과 같은 에러가 발생한다. fail to retrieve #{Object} data - Type definition error: [simple type, class #{package.obj

minholee93.tistory.com

https://www.baeldung.com/jackson-exception#jsonmappingexception-no-suitable-constructor

https://projectlombok.org/features/constructor