RestController에서 ResponseEntity<List<객체>>로 반환을 하려하는데, 아래와 같은 에러가 발생
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class io.spring.playheaven.order.dto.OrdersResponseDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])
위 에러는 Jackson 라이브러리가 객체를 JSON으로 직렬화하는 과정에서 발생하는 문제라고 함
Jackson은 객체를 JSON으로 변환할 때 객체 내에 직렬화 가능한 필드가 없거나, 접근이 불가능한 경우 직렬화에 실패한다고 하는 데 아래 3가지 이유로 발생한다고 함
- DTO 클래스에 getter 메소드가 없을 때.
- DTO 클래스가 기본 생성자를 제공하지 않을 때.
- Jackson이 객체를 직렬화하는 데 필요한 접근 수준이 맞지 않을 때
Ex) 필드가 private이고, 접근 가능한 getter가 없는 경우
나의 경우 이유없이 Getter, Setter, 생성자를 만들지 않고 에러가 발생할 때마다 어떠한 경우 Getter가 필요한지, 어떠한 경우 기본 생성자가 필요한지 등에 대해 파악하기 위해 Getter와 기본 생성자가 없었음.
에러가 발생하고 @Getter를 추가하자 마자 바로 정상적으로 반환 성공
단, 객체 안의 객체에도 마찬가지로 Getter가 필요
@Getter
@AllArgsConstructor
@ToString
public class OrdersResponseDto {
private Long ordersId;
private String ordersNumber;
private int totalPrice;
private List<GameInfo> gameList;
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class GameInfo {
private Long gameId;
private String gameName;
private int price;
}
'Various Error' 카테고리의 다른 글
[Eureka] Eureka Client의 UnsatisfiedDependencyException 에러 (0) | 2024.08.20 |
---|---|
[JSON] HttpMediaTypeNotAcceptableException (0) | 2024.08.19 |
[Spring Data JPA] PropertyReferenceException 에러 (0) | 2024.08.16 |
[Lombok] @Getter 어노테이션 에러 (0) | 2024.08.09 |
[IntellJ] application.yml 사용 시 데이터베이스 연동 주의 사항 (0) | 2024.08.04 |