본문 바로가기
개발/SpringBoot

SpringBoot cannot deserialize from Object value 에러

by 궁즉변 변즉통 통즉구 2023. 5. 27.
반응형

SpringBoot로 백엔드를 구현하고 테스트 중에 아래와 같은 에러가 발생하는 경우가 있다.

cannot deserialize from object value (no delegate- or property-based creator)

API 요청 시 Request Body의 JSON 데이터를 DTO(Java Object)로 변환을 해주는 이때 DTO의 기본 생성자를 찾을 수 없어서 나는 에러이다.

 

일반적으로 Java 클래스를 생성하면 기본 생성자는 아무런 설정없이 사용할 수 있다.

public class UserDto{
   private String userId;
   ....
}

....

UserDto userDto = new UserDto(); // 기본생성자 사용

 

하지만 가끔 Lombok을 활용하여 아래와 같은 어노테이션들만 적용이 되면 기본생성자를 사용할 수 없어 'cannot deserialize from Object' 에러가 발생할 수 있다.

@AllArgsConstructor
@RequiredArgsConstructor
public class UserDto{
   private String userId;
   ....
}

 

이럴 경우 기본생성자도 함께 사용 가능하도록 '@NoArgsConstructor' 어노테이션도 함께 작성해준다.

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class UserDto{
   private String userId;
   ....
}

 

각 어노테이션의 의미는 아래와 같다.

- @AllArgsConstructor( 모든 필드 값을 파라메타로 받는 생성자를 생성)

- @RequiredArgsConstructor (final이나 @NonNull인 필드 값만 파라메타로 받는 생성자 생성)

- @NoArgsConstructor (파라메타가 없는 기본 생성자 생성)

 

반응형

댓글