news 2026/4/18 10:29:29

SpringBoot:几种常用的接口日期格式化方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot:几种常用的接口日期格式化方法
全局时间格式化

通过在配置文件中设置可以实现全局时间格式化。在 Spring Boot 的配置文件 application.properties(或 application.yml)中添加以下两行配置:

#?格式化全局时间字段 spring.jackson.date-format=yyyy-MM-dd?HH:mm:ss #?指定时间区域类型 spring.jackson.time-zone=GMT+8

实现原理分析:Controller 在返回数据时,会自动调用 Spring Boot 框架中内置的 JSON 框架 Jackson,对返回的数据进行统一的 JSON 格式化处理。在处理过程中,它会判断配置文件中是否设置了 “spring.jackson.date-format=yyyy-MM-dd HH:mm:ss”,如果设置了,那么 Jackson 框架在对时间类型的字段输出时就会执行时间格式化的处理,从而实现全局时间字段的格式化功能。

部分时间格式化

在某些场景下,不需要对全局的时间都进行统一处理,可以使用注解的方式实现部分时间字段的格式化。在实体类 UserInfo 中添加 @JsonFormat 注解,实现代码如下:

import?com.fasterxml.jackson.annotation.JsonFormat; import?lombok.Data; import?java.util.Date; @Data public?class?UserInfo?{ ????private?int?id; ????private?String?username; ????//?对?createtime?字段进行格式化处理 ????@JsonFormat(pattern?=?"yyyy-MM-dd?hh:mm:ss",?timezone?=?"GMT+8") ????private?Date?createtime; ????private?Date?updatetime; }
自定义参数转换器

在 Spring Boot 中,可以使用自定义参数转换器实现日期格式化。实现 org.springframework.core.convert.converter.Converter接口,自定义参数转换器,如下:

@Configuration public?class?DateConverterConfig?{ ????@Bean ????public?Converter<String,?LocalDate>?localDateConverter()?{ ????????return?new?Converter<String,?LocalDate>()?{ ????????????@Override ????????????public?LocalDate?convert(String?source)?{ ????????????????return?LocalDate.parse(source,?DateTimeFormatter.ofPattern("yyyy-MM-dd")); ????????????} ????????}; ????} ????@Bean ????public?Converter<String,?LocalDateTime>?localDateTimeConverter()?{ ????????return?new?Converter<String,?LocalDateTime>()?{ ????????????@Override ????????????public?LocalDateTime?convert(String?source)?{ ????????????????return?LocalDateTime.parse(source,?DateTimeFormatter.ofPattern("yyyy-MM-dd?HH:mm:ss")); ????????????} ????????}; ????} }

在使用自定义参数转换器时可能会遇到一些问题。例如,将匿名内部类的写法精简成 lambda 表达式的方式时,启动项目可能会出现异常。原因是 lambda 表达式的接口是 Converter,不能得到具体的类型。解决办法有两种:一是不使用 lambda 表达式,老老实实使用匿名内部类;二是等 requestMappingHandlerAdapter bean 注册完成之后再添加自己的 converter,这样就不会注册到 FormattingConversionService中。

此外,还可以对前端传递的 string 进行正则匹配,如 yyyy-MM-dd HH:mm:ss、yyyy-MM-dd、HH:mm:ss等,以适应多种场景。

使用 Spring 注解

Spring 自带注解 @DateTimeFormat可以进行日期格式化。它通常用于将字符串格式的日期转换为日期类型。在需要进行日期格式转换的 Date属性上添加注解 @DateTimeFormat(pattern = “需要转换的格式”)。例如:

@DateTimeFormat(pattern?=?"yyyy-MM-dd?HH:mm:ss") private?Date?birthday;

使用 @DateTimeFormat注解时需要注意,pattern指定的格式是和传入的参数的格式相对应。如果格式不对应,可能会抛出异常。

使用 ControllerAdvice 配合 initBinder

在 controller 做环切时,可以使用 initBinder进行时间格式化。新建 InitBinderDateController类,进行全局时间入参格式化:

@ControllerAdvice public?class?InitBinderDateController?{ ????/** ?????*?将前台传递过来的日期格式的字符串,自动转化为时间类型 ?????*?[拦截不到@RequestBody注解修饰的参数] ?????*/ ????@InitBinder("date") ????public?void?initBinder(WebDataBinder?binder)?{ ????????//?Date?类型转换 ????????//????????DateFormat?dateFormat=new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss"); ????????//????????binder.registerCustomEditor(Date.class,new?CustomDateEditor(dateFormat,?true)); ????????//???????System.out.println("test"); ????????//?LocalDateTime?类型转换 ????????binder.registerCustomEditor(LocalDateTime.class,?new?PropertyEditorSupport()?{ ????????????@Override ????????????public?void?setAsText(String?text)?{ ????????????????if?(!StringUtils.isEmpty(text))?{ ????????????????????setValue(LocalDateTime.parse(text,?DateTimeFormatter.ofPattern("yyyy-MM-dd?HH:mm:ss"))); ????????????????} ????????????} ????????}); ????} }
后端全局设置

可以通过配置后端实现全局请求日期格式转换。例如,在配置文件中配置:

spring: ??jackson: ????date-format:?yyyy-MM-dd?HH:mm:ss ????time-zone:?GMT+8

或者使用配置类方式,适合前后端都是 json 格式交互。只需要用 @Configuration定义一个配置类,注入两个 Bean即可完成全局日期响应格式化处理。

@Configuration public?class?LocalDateTimeSerializerConfig?{ ????private?static?final?String?YYYY_MM_DD_HH_MM_SS?=?"yyyy-MM-dd?HH:mm:ss"; ????@Bean ????public?LocalDateTimeSerializer?localDateTimeSerializer()?{ ????????return?new?LocalDateTimeSerializer(DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS)); ????} ????@Bean ????public?LocalDateTimeDeserializer?localDateTimeDeserializer()?{ ????????return?new?LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS)); ????} ????@Bean ????public?Jackson2ObjectMapperBuilderCustomizer?jackson2ObjectMapperBuilderCustomizer()?{ ????????return?builder?->?{ ????????????builder.serializerByType(LocalDateTime.class,?localDateTimeSerializer()); ????????????builder.deserializerByType(LocalDateTime.class,?localDateTimeDeserializer()); ????????}; ????} }
接口输出日期格式为时间戳

在 Spring Boot 中,实现接口输出日期格式为时间戳的步骤如下:

  1. 配置日期格式化器:在 Spring Boot 的配置文件中,我们可以配置一个日期格式化器,将日期格式化为时间戳。可以在 application.properties(或 application.yml)中添加以下配置:spring.mvc.format.date=unix。

  2. 定义实体类:我们首先需要定义一个实体类,用于表示需要输出的日期字段:

    public?class?MyEntity?{
    ???private?Date?date;
    ???//?getter?and?setter
    }

  3. 编写控制器:接下来,我们需要编写一个控制器类,用于处理接口请求并返回日期字段的时间戳形式。我们可以使用 @JsonFormat注解来指定日期字段的格式化方式。下面是一个简单的示例:

    @RestController
    public?class?MyController?{
    ???@GetMapping(“/entity”)
    ???public?MyEntity?getEntity()?{
    ???MyEntity?entity?=?new?MyEntity();
    ???entity.setDate(new?Date());
    ???return?entity;
    ???}
    }

  4. 测试接口:启动 Spring Boot 应用后,我们可以通过访问 /entity接口来获取日期字段的时间戳形式。可以使用 Postman 或浏览器等工具进行测试。

GET /entity HTTP/1.1

Host: localhost:8080

响应结果将会是一个 JSON 格式的对象,其中日期字段将以时间戳的形式表示。例如:

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

Godot卡牌游戏框架:从概念到实现的完整开发指南

Godot卡牌游戏框架&#xff1a;从概念到实现的完整开发指南 【免费下载链接】godot-card-game-framework A framework which comes with prepared scenes and classes to kickstart your card game, as well as a powerful scripting engine to use to provide full rules enfo…

作者头像 李华
网站建设 2026/4/18 8:16:40

B站视频下载神器:零基础也能轻松掌握的4K高清下载技巧

B站视频下载神器&#xff1a;零基础也能轻松掌握的4K高清下载技巧 【免费下载链接】bilibili-downloader B站视频下载&#xff0c;支持下载大会员清晰度4K&#xff0c;持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为无法保存B站精…

作者头像 李华
网站建设 2026/4/17 5:40:43

LRCGet:离线音乐库批量歌词下载终极指南

LRCGet&#xff1a;离线音乐库批量歌词下载终极指南 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否拥有大量离线音乐文件&#xff0c;却苦于找不…

作者头像 李华
网站建设 2026/4/18 7:56:35

EdgeRemover终极指南:一键安全彻底卸载Edge浏览器

EdgeRemover终极指南&#xff1a;一键安全彻底卸载Edge浏览器 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 还在为Windows系统自带的Microsoft Edge浏…

作者头像 李华
网站建设 2026/3/25 13:17:29

如何快速迁移艾尔登法环存档:EldenRingSaveCopier完整指南

如何快速迁移艾尔登法环存档&#xff1a;EldenRingSaveCopier完整指南 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 在艾尔登法环的广阔世界中&#xff0c;数百小时的游戏进度和精心培养的角色一旦丢失就是…

作者头像 李华
网站建设 2026/4/17 14:21:54

springcloud springboot nacos版本对应

组件版本关系 Spring Cloud Alibaba Version Sentinel Version Nacos Version RocketMQ Version Dubbo Version Seata Version 2.2.6.RELEASE 1.8.1 1.4.2 4.4.0 2.7.8 1.3.0 2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE 1.8.0 1.4.1 4.4.0 2.7.8 1.3.0 2.2.3.…

作者头像 李华