에러

[SpringBoot 에러] (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

ummchicken 2023. 1. 8. 14:46

 

실습을 하다가 만나게 된 에러...

 

 

JSON으로 데이터를 생성하려 Post로 전송을 했다.

{
  "title": "제목입니다.",
  "tutor": "음치킨"
}

 

하지만 

500 에러가 나고, 

 

 

콘솔을 확인해 보니 

제일 첫 번째 줄에 났던 에러 문장 맨 뒤에 

(에러가 날 때는 제일 처음에 난 에러부터 해결하자. 

그러면 뒤에 에러 줄줄이 해결될 가능성 높음)

(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

이런 에러가 났다.

 

 

구글링해보니 

"파라미터가 있는 constructor 가 있을 때 어떻게 Json 모델을 생성해야되는지 몰라서 발생하는 문제"

라고 한다.

출처 : https://developer-ping9.tistory.com/232

https://azurealstn.tistory.com/74

 

 

 

해결 방법은 

  1. Json 으로 취급할 필드가 무엇인지 알려준다 (@JsonProperty 사용)
  2. 또는 NoArgsConstructor 를 만들어준다

라고 한다.

 

 

따라서 두 번째 방법(NoArgsConstructor)으로 코드 수정을 해보겠다.

 

 

 

[기존 코드]

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@RequiredArgsConstructor
public class CourseRequestDto {

    private final String title;
    private final String tutor;

}

 

 

[수정 코드]

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
public class CourseRequestDto {

    private String title;
    private String tutor;

    public CourseRequestDto(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

 

 

[JSON / POST]

{
  "title": "제목입니다.",
  "tutor": "음치킨"
}

보내고, 

 

 

 

[출력 결과]

 

정상 출력 되었다.