InvalidDefinitionException

nojam·2022년 7월 11일
0

java

목록 보기
1/2

문제

public class JsonTest {

    @Test
    void test() throws JsonProcessingException {

        String s = "[{\"date\":\"2023-07-02 23:59:59\"}]";

        ObjectMapper objectMapper = new ObjectMapper();

        Response[] value = objectMapper.readValue(s, Response[].class);
        log.info("==> value[0]={}", value[0]);
    }
}
@Getter
@Setter
public class Response {

	private LocalDateTime date;

}

테스트 실행시 InvalidDefinitionException 발생한다.

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling
(...생략...)

원인

  • 객체의 항목 중 LocalDateTime 이 있는 항목의 값을 ObejctMapper 를 사용해 입력 또는 가져오면 위와 같은 에러가 발생한다.
  • Java 8에서 추가된 LocalDateTime 항목을 제대로 직렬화 또는 역직렬화를 못하는 현상이다.

해결

ObjectMapperJavaTimeModule 추가해서 해결

public class JsonTest {

   @Test
   void test() throws JsonProcessingException {

       String s = "[{\"date\":\"2023-07-02 23:59:59\"}]";

       ObjectMapper objectMapper = new ObjectMapper();
       // ===== 추가 ======
       objectMapper.registerModule(new JavaTimeModule());

       Response[] value = objectMapper.readValue(s, Response[].class);
       log.info("==> value[0]={}", value[0]);
   }
}
profile
focusing

0개의 댓글