结果:我发现问题是我的 Date 对象正在获取 java.sql.Date。如果您使用 java.sql.Date,我猜您不会得到时间戳。
对于 java.sql.Date,Jackson 没有使用属性 WRITE_DATES_AS_TIMESTAMPS 或 setDateFormat 中的格式。为了使它成为可能,需要为 ObjectMapper 提供特殊的 Serializer。
像这样的东西:
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);