아아 공부하기 시러..... 하다가도 코드치면 나오는 에러들;;; 아 만나서 반가운데 오늘은 나오지 말지 ㅋㅋㅋㅋ
그럼에도 에러가 나왔기때문에 기록해야지. 사실 이 에러는 저번에도 나온에러다. 아 대충 뭐가 파싱하는데?? 에러가 나왔구나 정도만 이해하고 넘어갔다. 하지만 또 나왔으니 이번에는 기록해야쥐...
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 |
---|