[java] Jackson에서 날짜와 시간의 직렬화 및 역직렬화를 어떻게 처리하나요?

Jackson은 Java에서 JSON 데이터를 직렬화(serialize) 및 역직렬화(deserialize)하는 데 사용되는 라이브러리입니다. 날짜와 시간을 JSON 형식으로 처리할 때 Jackson은 여러 가지 옵션을 제공합니다.

  1. 기본 설정 사용:

Jackson은 기본적으로 Java의 java.util.Datejava.sql.Date를 ISO-8601 형식으로 직렬화합니다. 따라서, 특별한 설정을 하지 않아도 기본적으로 적절한 포맷으로 변환됩니다.

  1. 커스텀 직렬화 및 역직렬화:

Jackson에서는 com.fasterxml.jackson.databind.JsonSerializer를 구현하여 날짜와 시간을 원하는 형식으로 직렬화할 수 있습니다. 마찬가지로, com.fasterxml.jackson.databind.JsonDeserializer를 구현하여 JSON에서 날짜와 시간을 역직렬화할 수 있습니다.

아래는 Jackson에서 날짜와 시간을 커스텀 직렬화하는 예제입니다.

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CustomDateSerializer extends JsonSerializer<Date> {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String formattedDate = dateFormat.format(date);
        jsonGenerator.writeString(formattedDate);
    }
}

위의 예제에서는 SimpleDateFormat을 사용하여 날짜를 “yyyy-MM-dd” 형식으로 직렬화합니다. 이 커스텀 직렬화 클래스를 사용하려면 해당 필드에 @JsonSerialize(using = CustomDateSerializer.class) 어노테이션을 추가하면 됩니다.

이와 유사하게, 날짜와 시간을 커스텀 역직렬화하기 위해 com.fasterxml.jackson.databind.JsonDeserializer를 구현하고, 필드에 @JsonDeserialize(using = CustomDateDeserializer.class) 어노테이션을 추가하여 사용할 수 있습니다.

  1. 외부 라이브러리 사용:

Jackson은 Joda-Time 및 Java 8의 java.time 패키지와 연동하여 날짜 및 시간을 처리하는데 외부 라이브러리를 지원합니다. jackson-datatype-jodajackson-datatype-jsr310과 같은 라이브러리를 추가하고, 객체 매퍼에서 해당 모듈을 등록하면 해당 라이브러리를 사용할 수 있습니다.

Jackson에서 날짜와 시간의 직렬화 및 역직렬화를 처리하는 위의 방법들을 참고하여 원하는 형식으로 날짜와 시간을 다룰 수 있습니다.

참고 자료: