You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Spring配置让Jackson输出数据库原生Timestamp格式?

解决Spring中java.sql.Timestamp JSON序列化格式问题

其实Spring并没有提供直接的配置属性让你直接输出数据库原生的Timestamp格式,但有几个实用的方案可以解决这个问题:

方案一:自定义Jackson序列化规则

Spring MVC默认使用Jackson来处理JSON序列化,我们可以通过自定义java.sql.Timestamp的序列化器来指定输出格式:

  1. 首先创建一个自定义的序列化类:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;

public class CustomTimestampSerializer extends JsonSerializer<Timestamp> {
    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");

    @Override
    public void serialize(Timestamp timestamp, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (timestamp != null) {
            jsonGenerator.writeString(DATE_FORMAT.format(timestamp));
        }
    }
}
  1. 然后把这个序列化器注册到Jackson的ObjectMapper中。如果是Spring Boot项目,可以通过配置类来实现:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.sql.Timestamp;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(Timestamp.class, new CustomTimestampSerializer());
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

这样所有java.sql.Timestamp类型的字段都会被序列化成你想要的yyyy-MM-dd HH:mm:ss.S格式,和数据库原生输出一致。

方案二:在SQL查询中直接格式化

如果你不想修改Java代码,也可以在SQL查询的时候直接将Timestamp字段格式化为字符串。比如MySQL可以用DATE_FORMAT函数:

SELECT DATE_FORMAT(your_timestamp_column, '%Y-%m-%d %H:%i:%s.%f') AS formatted_time FROM your_table;

Oracle可以用TO_CHAR函数:

SELECT TO_CHAR(your_timestamp_column, 'YYYY-MM-DD HH24:MI:SS.FF') AS formatted_time FROM your_table;

这种方式直接从数据库返回格式化后的字符串,Java层不需要额外处理,但缺点是格式逻辑耦合在SQL中,如果多个查询都需要这个格式,会有重复代码。

补充说明

Spring默认的Timestamp序列化格式是ISO-8601带时区的格式(比如2018-04-26T07:52:02.000+0000),这是Jackson的默认行为,所以没有现成的配置属性可以直接切换到数据库原生格式,需要通过上面的方式自定义处理。

内容的提问来源于stack exchange,提问作者membersound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:18