문제
팀프로젝트 기능 구현을 하다가 테스트를 하는데 다음과 같은 에러가 발생했다.
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:
Cannot construct instance of `study.ticketService.domain.application.dto.ConcertTicketCreateRequest`
(although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)]
간단하게 번역해보면 다음과 같다.
(최소 하나의 Creator가 존재하더라도): 개체 값에서 역직렬화할 수 없습니다(대리자 또는 속성 기반 Creator 없음).
원인
Jackson에서 생성자를 만드는 다양한 Mode가 있는데 필드가 1개인 경우 기본 생성자를 만드는
Mode가 Delegating / Properties-based 로 나뉘는데, 두 Mode 중에서 어떤 것을 선택해야 할지 알 수 없어서 발생한 오류였다.
다음 이슈에서 잘 설명해준다.
해결
해결방법은 간단하다. @JsonCreator 어노테이션을 사용하거나, 부 생성자를 활용하거나, @JsonProperty를 사용하면 된다.
@JsonCreator 사용
생성자에 @JsonCreator를 사용하여 역 직렬화에 사용되는 생성자라고 명시해주면 됩니다.
부 생성자 사용
역직렬화를 할 때 생성할 수 있는 부 생성자를 만들어줍니다.
@JsonProperty 사용
@JsonProperty 를 사용하여 명시적으로 json 값의 key와 객체의 필드를 매핑시켜줄 수 있다.
728x90
'TIL' 카테고리의 다른 글
2023.01.11 TIL - [프로젝트] Ticket Auction 2일차 (0) | 2024.01.11 |
---|---|
2023.12.20 TIL - JPA - deleteAll() / deleteAllInBatch() (0) | 2023.12.20 |
2023.12.19 TIL - AWS SDK(Feat.S3) Credential 로드 (0) | 2023.12.19 |
2023.12.18 TIL (2) | 2023.12.18 |
2023.12.13 TIL (0) | 2023.12.13 |