안녕하세요. 다메카솔입니다. 🐿️
개발중에 발생한 에러를 예방하기위해 원인과 해결방법을 정리해보았습니다.
발생 배경
API에 Request를 보낼때, 서버에서 다음과 같은 에러가 발생하였습니다.
오류 메시지
Cannot construct instance of `class` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator))
원인
위 에러는 주로 Jackson 또는 다른 JSON 라이브러리를 사용하여 JSON 데이터를 해당 클래스의 객체로 변환하는 중에 발생합니다. 이러한 라이브러리들은 클래스를 직렬화하거나 역직렬화할 때 기본 생성자 (default constructor) 또는 특정 생성자를 사용하는데, 클래스에 기본 생성자가 없거나 또는 라이브러리가 사용할 수 있는 생성자가 없을 때 발생합니다.
직렬화와 역직렬화에 대해 더 궁금하시다면 아래 글도 함께 읽기 좋습니다.
https://damecasol.tistory.com/33
해결방법
- 기본생성자 추가
클래스에 기본 생성자를 추가합니다.. 기본 생성자란 매개변수를 가지지 않는 생성자입니다.
public class YourClass {
public YourClass() {
// 기본 생성자 내용
}
}
- 매개변수가 있는 생성자의 존재
클래스에 매개변수가 있는 생성자가 있는 경우, 해당 생성자도 정의되어 있는지 확인합니다. 만약 라이브러리가 특정 생성자를 필요로 하는데 그 생성자가 없다면 이 오류가 발생할 수 있습니다.
public class YourClass {
public YourClass(String param1, int param2) {
// 매개변수가 있는 생성자 내용
}
}
- @JsonCreator 어노테이션 사용
만약 여러 생성자가 있는 경우, Jackson 라이브러리에서 사용할 생성자를 명시하기 위해 @JsonCreator 어노테이션을 사용할 수 있습니다.
public class YourClass {
private String param1;
private int param2;
@JsonCreator
public YourClass(@JsonProperty("param1") String param1, @JsonProperty("param2") int param2) {
this.param1 = param1;
this.param2 = param2;
}
}
참조
문의 사항이나 도움이 필요하신 분은 댓글 달아주세요!
'IT > JAVA' 카테고리의 다른 글
[Mybatis] CDATA 란? (0) | 2023.03.15 |
---|---|
[Java]Serializable 직렬화 (0) | 2022.06.12 |