728x90
spring 프로젝트에서 JWT 웹 토큰을 사용하여 회원가입 테스트하던 중에 아래와 같은 error가 발생했습니다.
Cannot construct instance of `backend.core.controller.member.dto.MemberSignUpRequestDto` (no Creators, like default constructor, exist):
cannot deserialize from Object value (no delegate- or property-based Creator)
error 메시지를 살펴보니 회원가입 API에 사용되는 MemberSignUpRequestDto를 생성하지 못한다고 되어있습니다. MemberSignUpRequestDto의 생성자 형식에 맞게 json 요청을 보내도 문제는 해결되지 않았습니다. error 해결을 위해 stackoverflow에서 찾아본 결과 문제의 원인을 찾을 수 있었습니다.
Reason: This error occurs because jackson library doesn't know how to create your model which doesn't have an empty constructor and the model contains constructor with parameters which didn't annotated its parameters with @JsonProperty("field_name"). By default java compiler creates empty constructor if you didn't add constructor to your class. (출처)
jackson library가 빈 생성자가 없는 모델을 생성하는 방법을 모르기 error가 발생한다고 되어있습니다. 답변을 작성한 분이 제시한 해결방법은 다음과 같습니다.
- 빈 생성자를 추가한다.
- @JsonProperty("field_name") 어노테이션을 추가한다.
2번의 경우 어노테이션을 추가해도 같은 문제가 발생하여 1번의 해결 방법을 사용하여 문제를 해결했습니다.
@Data
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 추가
public class MemberSignUpRequestDto {
...
public MemberSignUpRequestDto(String email, String nickName, Address address, Profile profile) {
this.email = email;
this.nickName = nickName;
this.address = address;
this.profile = profile;
}
...
}
직접 코드를 사용하여 추가해도 되지만 빈 생성자를 생성해주는 lombok의 @NoArgsConstructor를 사용하였습니다.
728x90
'Error' 카테고리의 다른 글
[Error] The following parts of the payload were not documented (0) | 2022.02.28 |
---|---|
[Error] Failed to parse configuration (0) | 2021.11.18 |
[Error] No entity found for query (0) | 2021.11.08 |
[Error] UnhandledPromiseRejection (0) | 2021.10.08 |
[Error] Initialize a Spring Batch Database (0) | 2021.09.24 |