Java

[Visual Studio Code] Type definition error (중략) com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of (중략) (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- o..

xojuholic 2022. 11. 15.
728x90
반응형

이 글을 작성하는 현재 온라인으로 수강하고 있는 SpartaCodingClub - 웹개발의 봄, Spring 90기 과정 중 맞닥트린 오류를 제목으로 잡았다.

※ 오류

Type definition error: [simple type, class (중략)]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of (중략) (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

 

현재 과정을 따라가면서 조성한 개발 환경은 아래와 같다.

  • OS: Windows 11 Pro 64bit
  • IDE: Visual Studio Code (이하, VSC) (초기에는 IntelliJ IDEA였으나 라이센스 문제로 변경)
  • Language: Java
  • API Test Tool: Advanced REST Client (ARC) by MuleSoft

H2 Dababase를 띄우고 GET, POST 데이터가 JSON 형태로 잘 조회되고 입력되는지를 확인하는 과정이었는데, GET은 잘 조회되었으나 POST에서 ARC를 통해 아래와 같은 오류(붉은 사각형)를 접했다.

500 Internal Server Error

상기 이미지의 오류(500 Internal Server Error)와 관련한 터미널 상 오류는 아래와 같다.

Type definition error: [simple type, class com.sparta.week02.domain.CourseRequestDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.sparta.week02.domain.CourseRequestDto` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

 

한동안 원인을 찾지 못하다가 Type definition error에 대해 눈길이 쏠려 관련 검색을 하다 보니 발견한 것이 IntelliJ IDEAVSC 차이로 인한 부분이지 않을까라는 추정이었다. 바로 내부 빌더(컴파일러)가 있는 IntelliJ IDEA와 내부 빌더(컴파일러)가 없는 VSC 차이에 따른 코딩이라는 의미인데, 자세한 부분까지는 모르겠으니 해결한 내용만 명기하면 아래와 같다.

 

※ IntelliJ IDEA - CourseRequestDto.java [변경 전]

package com.sparta.week02.domain;

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

@Setter
@Getter
@RequiredArgsConstructor
public class CourseRequestDto {
    private final String title;
    private final String tutor;
}

 

※ VSC - CourseRequestDto.java [변경 후]

package com.sparta.week02.domain;

import lombok.Getter;
// import lombok.RequiredArgsConstructor;   // VSC 실행을 위해 주석 처리!
import lombok.Setter;

@Setter
@Getter
// @RequiredArgsConstructor     // VSC 실행을 위해 주석 처리!
public class CourseRequestDto {
    // private final String title;  // VSC 실행을 위해 주석 처리!
    // private final String tutor;  // VSC 실행을 위해 주석 처리!

    //===> VSC 실행을 위해서 final 삭제하고 변경 및 추가 begins
    private String title;
    private String tutor;

    public CourseRequestDto() {
    
    }

    public CourseRequestDto(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
    //===> VSC 실행을 위해서 final 삭제하고 변경 및 추가 ends
}

 

상기처럼 VSC에 코딩 내용을 적용한 후 POST 결과는 아래과 같이 정상으로 보여지는 것을 확인했다.

정상 POST 결과

 

728x90
반응형
SMALL

댓글

💲 추천 글