-
objectMapper로 map to object 변환시 timeformat 이슈 문제카테고리 없음 2021. 2. 25. 19:21
java에서 obejctMapper를 사용하여 객체로 변환시
타임 타입은 objectMapper에 적용된 해당 deserializer를 사용하여 변환한다.
때문에 타임 포맷이 다른경우 해당 포멧을 serializer나 deserializer에 설정하여 타임 모듈에 등록하여
양 타입 변환에 사용한다.
최근 생긴 이mysql db 데이터를 불러왔을때 타임 타입이 epoche time 값으로 넘어오는 이슈가 있었다.
이런 경우에 와 같이 Deserializer를 생성하고
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; public class EpochLocalDateTimeDeserializer extends LocalDateTimeDeserializer { public EpochLocalDateTimeDeserializer() { super(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); } @Override public LocalDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException { if (parser.hasToken(JsonToken.VALUE_NUMBER_INT)) { long value = parser.getValueAsLong(); Instant instant = Instant.ofEpochMilli(value); return LocalDateTime.ofInstant(instant, ZoneOffset.of("+09:00")); //한국시간이므로 UTC +09:00 적용 } return super.deserialize(parser, context); } }
변환할 객체 클래스
데이터 값에
@JsonDeserialize(using = EpochLocalDateTimeDeserializer.class)
private LocalDateTime dateTime;@JsonDeserialize 어노테이션을 통해 생성한 TimeDeserialize를 적용하면 된다.
댓글