JavaSqlDateSerializer.java

package tools.jackson.databind.ext.sql;

import java.text.DateFormat;

import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.*;
import tools.jackson.databind.annotation.JacksonStdImpl;
import tools.jackson.databind.ser.jdk.DateTimeSerializerBase;

/**
 * Compared to regular {@link java.util.Date} serialization, we do use String
 * representation here. Why? Basically to truncate of time part, since
 * that should not be used by plain SQL date.
 *<p>
 * NOTE: name was {@code SqlDateSerializer} in Jackson 2.x
 */
@JacksonStdImpl
public class JavaSqlDateSerializer
    extends DateTimeSerializerBase<java.sql.Date>
{
    public static final JavaSqlDateSerializer instance = new JavaSqlDateSerializer();

    public JavaSqlDateSerializer() {
        // 11-Oct-2016, tatu: As per [databind#219] fixed for 2.9; was passing `false` prior
        this(null, null);
    }

    protected JavaSqlDateSerializer(Boolean useTimestamp, DateFormat customFormat) {
        super(java.sql.Date.class, useTimestamp, customFormat);
    }

    @Override
    public JavaSqlDateSerializer withFormat(Boolean timestamp, DateFormat customFormat) {
    	return new JavaSqlDateSerializer(timestamp, customFormat);
    }

    @Override
    protected long _timestamp(java.sql.Date value) {
        return (value == null) ? 0L : value.getTime();
    }

    @Override
    public void serialize(java.sql.Date value, JsonGenerator g, SerializationContext provider)
        throws JacksonException
    {
        if (_asTimestamp(provider)) {
            g.writeNumber(_timestamp(value));
            return;
        }
        // 03-Feb-2021, tatu: Jackson 3.x will simply treat same as `java.util.Date`,
        //    instead of calling "value.toString()" by default

//        if (_customFormat == null) {
//            // 11-Oct-2016, tatu: For backwards-compatibility purposes, we shall just use
//            //    the awful standard JDK serialization via `sqlDate.toString()`... this
//            //    is problematic in multiple ways (including using arbitrary timezone...)
//            g.writeString(value.toString());
//            return;
//        }
        _serializeAsString(value, g, provider);
    }
}