Jackson은 Java에서 JSON 데이터를 직렬화(serialize) 및 역직렬화(deserialize)하는 데 사용되는 라이브러리입니다. 날짜와 시간을 JSON 형식으로 처리할 때 Jackson은 여러 가지 옵션을 제공합니다.
- 기본 설정 사용:
Jackson은 기본적으로 Java의 java.util.Date
및 java.sql.Date
를 ISO-8601 형식으로 직렬화합니다. 따라서, 특별한 설정을 하지 않아도 기본적으로 적절한 포맷으로 변환됩니다.
- 커스텀 직렬화 및 역직렬화:
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)
어노테이션을 추가하여 사용할 수 있습니다.
- 외부 라이브러리 사용:
Jackson은 Joda-Time 및 Java 8의 java.time
패키지와 연동하여 날짜 및 시간을 처리하는데 외부 라이브러리를 지원합니다. jackson-datatype-joda
및 jackson-datatype-jsr310
과 같은 라이브러리를 추가하고, 객체 매퍼에서 해당 모듈을 등록하면 해당 라이브러리를 사용할 수 있습니다.
Jackson에서 날짜와 시간의 직렬화 및 역직렬화를 처리하는 위의 방법들을 참고하여 원하는 형식으로 날짜와 시간을 다룰 수 있습니다.
참고 자료: