본문 바로가기
오류 처리/오류

[Spring] objectMapper에서 LocalDateTime문제발생

by dal_been 2023. 11. 23.
728x90

아아 공부하기 시러..... 하다가도 코드치면 나오는 에러들;;; 아 만나서 반가운데 오늘은 나오지 말지 ㅋㅋㅋㅋ 

그럼에도 에러가 나왔기때문에 기록해야지. 사실 이 에러는 저번에도 나온에러다. 아 대충 뭐가 파싱하는데?? 에러가 나왔구나 정도만 이해하고 넘어갔다. 하지만 또 나왔으니 이번에는 기록해야쥐...

 

 

ObjectMapper 그거 뭔데?

 

음 간단하게 parse해주는 클래스다.

 

- Java Object -> Json : Serialize (직렬화)

- Json -> Java Object : Deserailize (역직렬화)

 

이거 언제 사용하는디??

contoller를 사용할때 파라미터로 @RequestBody로 객체를 받는 경우가 있을 것이다. 이때 Json 데이터를 자바객체로 변환하는데 MappingJackson2HttpMessageConverter가 사용된다. 해당 클래스 내부에 objectMapper를 사용하여 Json데이터를 처리한다.

 

그렇구만. 그래서 그럼 저거 사용하려면 디펜던시 추가해야해??

Nope! org.springframework.boot:spring-boot-starter-web 관련된 디펜던시를 추가했다면 알아서 추가됩니다.

 

 

그래서 너가 만난 오류가 뭐여?

 

java 8 date/time type `java.time.localdatetime` not supported by default: add module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling

  

이게 무슨 오류나면 jackson라이브러리에서 LocalDateTime 타입을 Json으로 변환하거나 Json에서 LocalDatetime으로 변환을 지원하지 않는다는 것이다.

 

 

도데체 왜??

 

찾아보니 java.time 패키지의 날짜 및 시간 타입은 java 8에 처음 도입된 api이다. 그니까 원래 있던 java.util.date, java.util.Calander등과는 별개로 개발된 API이다.

 

그래서 jackson 과 같은 라이브러리들이 정확히 처리하지 못하는 문제가 발생한 것이다.

 

 

오...그럼 어떻게 해결혀??

 

간단하다 jackson-datatype-jsr310 을 통해서 java 8에 추가된 날짜 및 시간 api를 지원하게 하였다. 위에서 말했드시 spring-boot-starter-web을 디펜던시로 추가했다면 이미 jsr310도 있을 것이다.

 

그래서 obejctMapper를 빈으로 등록하여 사용한다면 

 

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

 

위 코드와 같이 String에 LocalDate를 매핑하도록 Jackson을 구성하도록 JavaTimeModule을 활성화하면 된다

-> JavaTimeModule : java.time 패키지 날짜와 시간타입들을 JSON타입으로 직렬화, 역직렬화 시켜주는 모듈

 

 

'오류 처리 > 오류' 카테고리의 다른 글

[Spring Cloud] OpenFeign 사용하면서 버전호환문제  (0) 2023.11.21