news 2026/6/10 15:30:27

Spring Boot全局日期格式配置方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot全局日期格式配置方法
spring boot中,不想每个实体类中都这样设置,有什么方法: @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime;

在Spring Boot中有几种方法可以避免在每个实体类中重复设置@JsonFormat注解:

方法一:全局配置(推荐)

application.ymlapplication.properties中配置全局的日期格式:

YAML配置:

yaml

spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 serialization: write-dates-as-timestamps: false

Properties配置:

properties

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 spring.jackson.serialization.write-dates-as-timestamps=false

方法二:自定义Jackson配置类

java

@Configuration public class JacksonConfig { @Bean @Primary public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() { return builder -> { // 设置全局日期格式 builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss"); builder.timeZone(TimeZone.getTimeZone("GMT+8")); // 针对Java 8时间API的配置 builder.serializers(new LocalDateTimeSerializer( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); builder.deserializers(new LocalDateTimeDeserializer( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 如果需要,也可以配置LocalDate等其他类型 builder.serializers(new LocalDateSerializer( DateTimeFormatter.ofPattern("yyyy-MM-dd"))); builder.deserializers(new LocalDateDeserializer( DateTimeFormatter.ofPattern("yyyy-MM-dd"))); }; } }

方法三:更详细的配置类

java

@Configuration public class JacksonConfig { @Bean @Primary public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); // 设置Java 8时间模块 JavaTimeModule javaTimeModule = new JavaTimeModule(); // LocalDateTime序列化和反序列化 javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // LocalDate序列化和反序列化 javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); objectMapper.registerModule(javaTimeModule); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); return objectMapper; } }

方法四:使用Mixin(为特定类型统一配置)

java

@JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") abstract class LocalDateTimeMixin { } @Configuration public class JacksonConfig { @Bean public Jackson2ObjectMapperBuilderCustomizer addCustomSerialization() { return builder -> { builder.mixIn(LocalDateTime.class, LocalDateTimeMixin.class); }; } }

方法五:自定义注解(如果需要不同格式)

java

@Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") public @interface DefaultDateTimeFormat { } // 使用方式 @DefaultDateTimeFormat private LocalDateTime createTime;

推荐方案

建议使用方法一(全局配置),最简单直接,能满足大部分场景。

如果项目中有多种不同的日期格式需求,可以:

  1. 使用方法一设置默认格式

  2. 对于特殊格式的字段,使用@JsonFormat覆盖全局配置

java

// 全局使用 yyyy-MM-dd HH:mm:ss // 特殊字段使用其他格式 @JsonFormat(pattern = "yyyy/MM/dd") private LocalDate specialDate;

这样既能减少重复代码,又能保持灵活性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:50:35

LeetCode热题100--763. 划分字母区间--中等

题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 “ababcc” 能够被分为 [“abab”, “cc”],但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。 注意…

作者头像 李华
网站建设 2026/6/10 2:50:24

模型下载慢影响项目进度?Open-AutoGLM三大加速策略立即生效

第一章:模型下载慢影响项目进度的根源分析在深度学习和人工智能项目的开发过程中,模型下载是构建可复现系统的关键前置步骤。然而,许多团队频繁遭遇模型下载速度缓慢的问题,直接导致训练任务延迟、CI/CD 流水线阻塞,甚…

作者头像 李华
网站建设 2026/6/10 14:13:45

leetcode 2092(排序+bfs)

2092: 找出知晓秘密的所有专家思路:排序bfs广度优先搜索假设一开始 0 和 1 知道秘密。对比如下两种情况:时间 1,1 和 2 开会。时间 2,2 和 3 开会。秘密会传播给 2 和 3,最终 0,1,2,3 都知道秘密。时间 1,2…

作者头像 李华
网站建设 2026/6/10 10:30:05

30分钟极速入门:LanceDB Java客户端实战指南

30分钟极速入门:LanceDB Java客户端实战指南 【免费下载链接】lancedb Developer-friendly, serverless vector database for AI applications. Easily add long-term memory to your LLM apps! 项目地址: https://gitcode.com/gh_mirrors/la/lancedb LanceD…

作者头像 李华
网站建设 2026/6/9 5:29:11

Obsidian主题定制终极指南:打造高效知识管理界面

Obsidian主题定制终极指南:打造高效知识管理界面 【免费下载链接】obsidian-california-coast-theme A minimalist obsidian theme inspired by macOS Big Sur 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-california-coast-theme Obsidian作为现…

作者头像 李华
网站建设 2026/6/10 8:21:05

Verl项目vLLM多GPU部署实战:5大挑战与高效解决方案

Verl项目vLLM多GPU部署实战:5大挑战与高效解决方案 【免费下载链接】verl verl: Volcano Engine Reinforcement Learning for LLMs 项目地址: https://gitcode.com/GitHub_Trending/ve/verl Verl项目作为火山引擎推出的强化学习框架,在大规模语言…

作者头像 李华