본문 바로가기
Error

[Error] Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling (through reference chain: com.jnlim.tennis.dto.TennisDetailDTO["receiptBeginDateTime"]

by jn4624 2024. 11. 1.
반응형

이번엔 조회 응답 단일 객체를 테스트하는 과정에서 만난 에러이다.

 

1. 에러 메세지

 

2. 오류 발생 원인

ObjectMapper를 사용해 객체를 직렬화/역직렬화하는 과정에서 Jackson이 Java 8의 LocalDateTime, LocalDate, LocalTime 타입을 기본적으로 지원하지 않기 때문에 발생한 오류로 확인되었다.

 

3. 해결 방법

의존성 추가

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'

 

모듈 등록

@Configuration
public class ObjectMapperConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        return objectMapper;
    }
}

 

위와 같이만 설정해도 에러 메세지는 나타나지 않지만 한가지 문제가 발생한다.

Jackson이 LocalDateTime을 직렬화할 때 기본적으로 배열로 변환한다.

  • Jackson의 기본 직렬화: [year, month, day, hour, minute] 배열 형태로 변환

 

포맷 설정

LocalDateTime 필드에 @JsonFormat 어노테이션을 추가하여 원하는 포맷으로 직렬화되도록 설정한다.

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime receiptBeginDateTime;

 

위와 같이 설정해주면 해당 오류를 해결할 수 있다.

 

반응형