[trouble shooting] InvalidDefinitionException: Cannot construct instance of "DTO"(no Creators, like default constructor, exist): cannot deserialize from Object value

2023. 1. 12. 22:07BACKEND/TROUBLE SHOOTING

 

문제

@AllArgsConstructor를 사용해 모든 필드를 받는 생성자를 사용했는데도 Postman으로 테스트 시 에러가 남

 

해결

DTO에 @NoArgsConstructor을 추가

 

설명

Serialize(직렬화) : 객체의 상태를 바이트 스트림으로 변환

Deserialize(역직렬화) : 바이트 스트림을 객체 형태로 변환

POST 요청에서 에러가 발생했는데, 기본 생성자가 없어서 역직렬화 실패라고 한다. Controller단에서 @RequestBody가 설정되어 Json에서 DTO Object로 변환이 필요한 경우 에러가 발생하는 것 같다. @RestController에서 @RequestBody를 바인딩하기 위해 ObjectMapper를 사용하는데 기본 생성자로 DTO를 생성한다. 그렇기 때문에 @NoArgsConstructor가 있어야 한다.

 

참고자료

@RequestBody에 왜 기본 생성자는 필요하고, Setter는 필요 없을까? #2 (velog.io)

 

@RequestBody에 왜 기본 생성자는 필요하고, Setter는 필요 없을까? #2

이전 글에서는 어떻게 @RequestBody를 처리하는지를 알아보기 위한 과정을 설명했습니다. 이번 글에서는 @RequestBody를 바인딩하는 ObjectMapper에 대해 알아보고, 결론을 짓겠습니다. 참고로 아래 사진

velog.io

자바 직렬화, 그것이 알고싶다. 훑어보기편 | 우아한형제들 기술블로그 (woowahan.com)

 

자바 직렬화, 그것이 알고싶다. 훑어보기편 | 우아한형제들 기술블로그

{{item.name}} 자바의 직렬화 기술에 대한 대한 이야기입니다. 간단한 질문과 답변 형태로 자바 직렬화에 대한 간단한 설명과 직접 프로젝트를 진행하면서 겪은 경험에 대해 이야기해보려 합니다.

techblog.woowahan.com

@Request Body에서는 Setter가 필요없다? (tistory.com)

 

@Request Body에서는 Setter가 필요없다?

회사에서 근무하던중 새로오신 신입 개발자분이 저에게 하나의 질문을 했습니다. POST 요청시에 Setter가 필요없는것 같다고. 여태 제가 알던것과는 달라서 어떻게 된 일인지 궁금했습니다. 정말 P

jojoldu.tistory.com