인프런 커뮤니티 질문&답변

woojin126님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

회원 등록 API

안녕하세요 선생님 V2방식에대한 질문

작성

·

317

2

회원등록 V2 방식을 그대로 사용하고
POSTMAN에서 POST방식으로 BODY안에
CreateMemberRequest 클래스의 필드와 같은값으로 데이터를
전송해봤습니다.
그런데 기본생성자가 없을경우에는
"org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class jpashops.ormonetwocombine.dto.RequestItemDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `jpashops.ormonetwocombine.dto.RequestItemDto` 
포스트맨 에러입니다
이런 에러 구문이 나오더군요, 그런데 기본생성자를 CreateMemberRequest에 추가해주고 다시 Postman으로 전송하더니 잘되더군요,
받아온 JSON 데이터를 파싱하는데 기본생성자가 원래 필수인가요~?

답변 1

2

안녕하세요. woojin126님, 공식 서포터즈 OMG입니다.

Jackson은 Post요청시 Jackson2HttpMessageConverter이 데이터를 처리하는데요, 내부적으로 ObjectMapper를 사용합니다. ObjectMapper는 기본생성자와 getter 혹은 setter 혹은 public field를 보고 property명을 찾습니다. 그래서 기본생성자와 getter만 있어도 prorperty명을 찾아 값을 주입시켜줄 수 있습니다.

그럼 궁금해 하시는 "기본생성자는 왜 필수인가?"에 대해 잘 정리된 글 링크 공유합니다.

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

감사합니다.

정말 좋은 포스트 공유해주셔서 감사합니다!