Spring Boot中Java.sql.Timestamp字段在Postman显示异常的解决求助
解决Spring Boot返回java.sql.Timestamp为时间戳的问题
Postman中transactionDate显示为时间戳,是因为Spring Boot默认的Jackson序列化规则会将java.sql.Timestamp(属于java.util.Date子类)序列化为时间戳格式。以下是几种解决方法:
方法一:字段级注解控制单个字段
直接在TransactionEntity的transactionDate字段上添加@JsonFormat注解,指定所需的日期格式和时区:
import com.fasterxml.jackson.annotation.JsonFormat; import java.sql.Timestamp; public class TransactionEntity { // 格式匹配需求的"yyyy-MM-dd HH:mm:ss.S",时区设置为东八区(根据业务调整) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.S", timezone = "GMT+8") private Timestamp transactionDate; // 其他字段、getter/setter方法省略 }
方法二:全局配置统一所有日期字段
如果希望项目中所有日期类型字段都采用相同格式返回,可在配置文件中设置Jackson参数:
使用application.properties
# 指定日期序列化格式 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss.S # 设置时区 spring.jackson.timezone=GMT+8
使用application.yml
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss.S timezone: GMT+8
方法三:自定义Jackson配置类(灵活扩展)
通过配置类自定义ObjectMapper,实现更灵活的序列化规则:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.text.SimpleDateFormat; import java.util.TimeZone; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); // 定义日期格式并设置时区 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8")); objectMapper.setDateFormat(dateFormat); // 禁用将日期序列化为时间戳的默认行为 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return objectMapper; } }
注意事项
- 时区设置需与业务场景匹配,国内业务通常使用
GMT+8 - 若项目同时使用
java.time包下的日期类(如LocalDateTime),可额外引入JavaTimeModule来兼容序列化
内容的提问来源于stack exchange,提问作者Albert Lam
相关产品推荐
相关产品推荐

