SerializationUtil.java

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.search.documents.implementation;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.deser.std.UntypedObjectDeserializer;
import com.fasterxml.jackson.databind.module.SimpleModule;

import java.text.SimpleDateFormat;
import java.util.TimeZone;

/**
 * Utility type to configure JSON serialization behavior.
 */
public class SerializationUtil {
    /**
     * Configures an {@link ObjectMapper} with custom behavior needed to work with the Azure Cognitive Search REST API.
     *
     * @param mapper the mapper to be configured
     */
    public static void configureMapper(ObjectMapper mapper) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        df.setTimeZone(TimeZone.getDefault());
        mapper.setDateFormat(df);

        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);

        UntypedObjectDeserializer defaultDeserializer = new UntypedObjectDeserializer(null, null);
        Iso8601DateDeserializer dateDeserializer = new Iso8601DateDeserializer(defaultDeserializer);
        GeoPointDeserializer geoPointDeserializer = new GeoPointDeserializer(dateDeserializer);
        SimpleModule module = new SimpleModule();
        module.addDeserializer(Object.class, geoPointDeserializer);
        mapper.registerModule(module);
    }
}