[java] Jackson의 커스텀 직렬화와 역직렬화 처리

Jackson은 Java에서 JSON 데이터를 처리하는 데 널리 사용되는 라이브러리이다. 기본적으로 Jackson은 객체를 JSON 문자열로 변환하거나, JSON 문자열을 객체로 역직렬화하는 데 사용된다. 하지만 때로는 특정한 방식으로 객체를 직렬화하거나 역직렬화해야 할 수도 있다.

커스텀 직렬화

Jackson에서 객체를 커스텀하게 직렬화하려면 JsonSerializer 클래스를 상속받아 직렬화를 정의해야 한다. 다음은 간단한 예제이다.

public class CustomSerializer extends JsonSerializer<CustomObject> {
    @Override
    public void serialize(CustomObject value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("customField", value.getCustomField());
        gen.writeEndObject();
    }
}

위 코드에서 CustomObject는 커스텀 직렬화를 적용하고자 하는 객체를 나타낸다. serialize 메서드 내에서 직렬화를 수행하고, JsonGenerator를 사용하여 필드를 쓰거나 객체를 시작/종료하는 등의 작업을 수행한다.

커스텀 역직렬화

Jackson에서 객체를 커스텀하게 역직렬화하려면 JsonDeserializer 클래스를 상속받아 역직렬화를 정의해야 한다. 다음은 간단한 예제이다.

public class CustomDeserializer extends JsonDeserializer<CustomObject> {
    @Override
    public CustomObject deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        ObjectCodec oc = p.getCodec();
        JsonNode node = oc.readTree(p);
        
        String customField = node.get("customField").asText();
        
        return new CustomObject(customField);
    }
}

위 코드에서 CustomObject는 커스텀 역직렬화를 적용하고자 하는 객체를 나타낸다. deserialize 메서드 내에서 역직렬화를 수행하고, JsonParser를 사용하여 필드를 읽거나 JSON을 객체로 변환하는 작업을 수행한다.

Jackson을 사용할 때 커스텀 직렬화와 역직렬화를 이용하여 JSON 데이터를 다룰 수 있다.

자세한 내용은 공식 Jackson 라이브러리 문서를 참고하면 도움이 될 것이다.

Jackson 라이브러리 공식 문서