Gson은 기본적으로 날짜 및 시간 값을 직렬화 및 역직렬화할 때 기본 형식을 사용합니다. 하지만 때로는 우리가 원하는 형식으로 날짜를 표현하고 싶을 수 있습니다. 이 경우에는 Gson의 커스텀 직렬화 및 역직렬화를 사용하여 원하는 형식을 정의할 수 있습니다.
먼저, 커스텀 직렬화를 사용하여 날짜 값을 JSON 형식으로 변환하는 방법을 살펴보겠습니다. Gson은 JsonSerializer
인터페이스를 통해 직렬화를 처리합니다. 다음은 날짜 값을 yyyy-MM-dd 형식의 문자열로 직렬화하는 예제 코드입니다.
import java.lang.reflect.Type;
import java.time.LocalDate;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
public class LocalDateSerializer implements JsonSerializer<LocalDate> {
@Override
public JsonElement serialize(LocalDate date, Type typeOfSrc,
JsonSerializationContext context) {
return new JsonPrimitive(date.toString());
}
}
이제 커스텀 직렬화를 사용하여 JSON 값을 날짜로 역직렬화하는 방법을 알아보겠습니다. Gson은 JsonDeserializer
인터페이스를 통해 역직렬화를 처리합니다. 다음은 yyyy-MM-dd 형식의 문자열을 LocalDate로 역직렬화하는 예제 코드입니다.
import java.lang.reflect.Type;
import java.time.LocalDate;
import com.google.gson.JsonElement;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonParseException;
public class LocalDateDeserializer implements JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
String dateStr = json.getAsString();
return LocalDate.parse(dateStr);
}
}
이제 Gson 객체를 생성하고 커스텀 직렬화 및 역직렬화 기능을 등록해야 합니다. 다음은 Gson 객체를 생성하고 커스텀 직렬화 및 역직렬화 기능을 등록하는 예제 코드입니다.
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.time.LocalDate;
public class GsonExample {
public static void main(String[] args) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateSerializer());
gsonBuilder.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer());
Gson gson = gsonBuilder.create();
// Serialize
LocalDate date = LocalDate.now();
String json = gson.toJson(date);
System.out.println("Serialized JSON: " + json);
// Deserialize
LocalDate deserializedDate = gson.fromJson(json, LocalDate.class);
System.out.println("Deserialized Date: " + deserializedDate);
}
}
위의 예제 코드에서는 Gson 객체를 생성하고 registerTypeAdapter
메소드를 사용하여 LocalDate 클래스에 대한 커스텀 직렬화 및 역직렬화 기능을 등록합니다. toJson
메소드를 사용하여 LocalDate 객체를 JSON으로 직렬화하고, fromJson
메소드를 사용하여 JSON을 LocalDate로 역직렬화합니다.
이제 Gson을 사용하여 날짜 및 시간 값을 다루는 방법에 대해 알게 되었습니다. 커스텀 직렬화 및 역직렬화를 사용하면 Gson을 더욱 유연하게 사용할 수 있습니다.