Jackson 라이브러리란?
Jackson은 Java 기반의 라이브러리로, Java 객체를 JSON으로 변환하거나 JSON을 다시 Java 객체로 변환하는 작업에 널리 사용됩니다. Jackson API는 다른 API보다 처리 속도가 빠르고 메모리 사용량이 적어, 대용량 객체를 다룰 때 특히 유리한 성능을 보여줍니다.
날짜를 원하는 형식으로 출력하려면 ObjectMapper 클래스의 setDateFormat() 메서드를 사용하면 됩니다. 이 메서드는 날짜·시간 값을 문자열로 직렬화하거나 JSON 문자열에서 역직렬화할 때 적용되는 기본 DateFormat을 설정하는 역할을 합니다.
메서드 문법
public ObjectMapper setDateFormat(DateFormat dateFormat)
사용 예제
아래 예제에서는 SimpleDateFormat을 이용해 "yyyy-MM-dd" 형식의 DateFormat을 생성한 뒤, ObjectMapper에 설정하여 JSON 문자열의 생년월일(birthDate) 값을 Date 객체로 역직렬화하는 과정을 보여줍니다.
import java.io.*;
import java.text.*;
import java.util.*;
import com.fasterxml.jackson.databind.*;
public class JacksonDateformatTest {
final static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws Exception {
JacksonDateformatTest jacksonDateformat = new JacksonDateformatTest();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
mapper.setDateFormat(df);
jacksonDateformat.dateformat();
}
public void dateformat() throws Exception {
String json = "{\"birthDate\":\"1980-12-08\"}";
Reader reader = new StringReader(json);
Employee emp = mapper.readValue(reader, Employee.class);
System.out.println(emp);
}
}
// Employee 클래스
class Employee implements Serializable {
private Date birthDate;
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
@Override
public String toString() {
return "Employee [birthDate=" + birthDate + "]";
}
}실행 결과
Employee [birthDate=Mon Dec 08 00:00:00 IST 1980]
추가 팁: 필드 단위 형식 지정 (@JsonFormat)
ObjectMapper 전역 설정 대신 특정 필드에만 별도의 날짜 형식을 적용하고 싶다면, 해당 필드에 @JsonFormat 어노테이션을 사용하는 방법도 있습니다. 아래와 같이 pattern과 timezone을 함께 지정하면 더욱 정교한 제어가 가능합니다.
public class Employee implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING,
pattern = "yyyy-MM-dd",
timezone = "Asia/Seoul")
private Date birthDate;
}