結果:問題は、Dateオブジェクトがjava.sql.Dateを取得していることであることがわかりました。java.sql.Dateを使用している場合、タイムスタンプは取得されないと思います。
Jacksonは、java.sql.Dateの場合、プロパティWRITE_DATES_AS_TIMESTAMPSまたはsetDateFormatのフォーマットを使用していません。これを可能にするには、ObjectMapper用の特別なシリアライザーを提供する必要があります。
そんな感じ:
import java.io.IOException;
import java.text.DateFormat;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class SqlDateSerializer extends StdSerializer<java.sql.Date> {
private static final long serialVersionUID = 1L;
public SqlDateSerializer() {
super(java.sql.Date.class, true);
}
private ThreadLocal<DateFormat> DATE_FORMAT
= ThreadLocal.withInitial(()
-> new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"));
@Override
public void serialize(java.sql.Date value, JsonGenerator gen, SerializerProvider provider) throws IOException {
String formatted = DATE_FORMAT.get().format(value);
gen.writeString(formatted);
}
}
使用法:
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(java.sql.Date.class, new SqlDateSerializer());
ObjectMapper om = new ObjectMapper();
om.registerModule(simpleModule);