@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
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
디자인패턴 - Strategy Design Pattern (0) | 2023.02.11 |
---|---|
Enum 활용하기 (0) | 2023.01.07 |
JPA Entity와 Lombok Annotation (1) | 2022.10.29 |
[EDA] 이벤트 데이터 설계 (2) | 2022.07.16 |
[예외처리] notification pattern (0) | 2022.06.13 |