본문 바로가기

트러블슈팅

cannot deserialize from Object value (no delegate- or property-based Creator)

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.example.demo.member.dto.MemberDto$Post` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

 

package com.example.demo.member.dto;

import jakarta.validation.constraints.Pattern;
import lombok.*;

import java.time.LocalDateTime;
import java.util.List;

public class MemberDto {

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Post {
        @NonNull
        @Pattern(regexp = "^[a-zA-Z0-9+.-]+@[a-zA-Z0-9.-]+$")
        private String email;
        @NonNull
        @Pattern(regexp = ".{8,}")
        private String password;
        @NonNull
        @Pattern(regexp = ".{2,}")
        private String name;
    }

    @Getter
    @AllArgsConstructor
    public static class Response {
        private long memberId;
        private String name;
        private String email;
        private LocalDateTime createAt;
        private LocalDateTime modifiedAt;
        private List<String> boards;
        private List<String> comments;
    }
}

 기존 Dto에는 @NoArgsConstructor 즉, 기본 생성자가 없었는데

이로 인해 JSON 요청 본문을 예상된 MemberDto.Post 객체로 역직렬화할 수 없었다

 

NoArgsConstructor를 추가해서 기본 생성자를 만들어주니 문제가 해결되었다.

 

근데 이전 프로젝트에서는 그냥 됐었는데... 뭐가 문젠지 모르겠음..