소프트웨어-이야기/프로그래밍 언어와 프레임워크
Lombok 기본 생성자와 Getter/Builder 어노테이션
americano_people
2022. 11. 12. 12:17
@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번 삽질했던 문제였다.
해결 방법
- Lombok을 사용하려면 매개변수가 없는 기본 생성자가 필요하다.
- lombok.config 파일을 만든 후, 다음과 같은 설정을 추가하면 롬복에서 @Value, @Data을 쓸때 private 범위로 매개변수가 없는 기본 생성자를 만들어준다.
lombok.noargsconstructor.extraprivate = true
이 방법을 안하려면, dto 클래스에 json creator 등을 명시하거나, 매개변수가 없는 기본 생성자를 만들거나, @NoargsConstructor 어노테이션을 추가해주면 된다.
그래도 안된다면?
문제의 시작은 기본 생성자이다. 다 잘했는데 안된다면, lombok.config 설정 파일이 잘못된 경로에 추가되어있다거나, 뭔가 누락된거다. 기본 생성자가 채워지는 곳이 누락된건 없을지 다시 살펴보자.
참고
https://www.baeldung.com/jackson-exception#jsonmappingexception-no-suitable-constructor