[Spring] cannot deserialize from Object value 에러

김기현·2022년 12월 27일
0
post-thumbnail

발생한 에러

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

원인

jackson library가 빈 생성자(기본 생성자)가 없는 모델을 생성하는 방법을 몰라서 발생하는 에러이다.
JSON 데이터를 Java Object로 변환하기 위해서 빈 생성자가 필요하다.

해결과정

에러메시지에서 에러가 발생하는 부분인 PostProductReq에 빈 생성자를 추가해주면 문제는 해결된다.

  1. @NoArgsConstructor 어노테이션 추가
  2. protected PostProductReq(){}

참고

  • POST
    POST 요청 @RequestBody 로 넘어오는 객체에는 기본 생성자가 필요하다.
    스프링에서 JSON형 변환을 담당하는 것은 Jackson2HttpMessageConverter 이다.
    @RequestBody 로 JSON 데이터가 넘어오면 Java Object 변환은 Jackson2HttpMessageConverter에서 해준다.
    더 들어가면 Jackson2HttpMessageConverter 의 ObjectMaper를 사용해서 Object로 전환해준다.
  • GET
    JSON 데이터가 아닌 Query Parameter 이다.
    그래서 Jackson2HttpMessageConverter 가 아니라 WebDataBinder 를 사용한다.

만약 그래도 안된다면?

Preference > Build, Execution, Deployment > Gradle
여기서 Build and run에 Intellij로 되어있다면 아래의 사진처럼 Gradle로 변경한다.

이전의 Gradle 설정이 IDE에 적용되었는데, 변경후에도 이전의 설정대로 실행되어 에러가 고쳐지지 않는다.

IntelliJ IDEA는 Gradle을 기본 실행기로 한다. 결과적으로 CI (Continuous Integration) 서버에서 동일한 테스트 결과를 얻기에 IntelliJ IDEA는 Gradle을 기본 실행기로 한다. Gradle로 기본실행하면 느리기에 Intellij 실행기로 변경하지만 내 PC에선 잘 되지만 배포하니 안된다 등의 이슈가 발생할 수 있다.

profile
피자, 코드, 커피를 사랑하는 피코커

0개의 댓글