news 2026/5/1 11:05:35

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/5/1 6:00:54

Unity游戏资源提取完全指南:从入门到精通

Unity游戏资源提取完全指南&#xff1a;从入门到精通 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 你是否曾经看到Unity游戏中的精美…

作者头像 李华
网站建设 2026/4/30 11:48:31

一文说清Keil中头文件无法包含的根本原因

为什么Keil总说“找不到头文件”&#xff1f;一文彻底讲透路径背后的真相你有没有遇到过这样的场景&#xff1a;明明看到stm32f4xx_hal.h就躺在项目文件夹里&#xff0c;结果一编译——fatal error: stm32f4xx_hal.h: No such file or directory瞬间懵了。重启Keil&#xff1f;…

作者头像 李华
网站建设 2026/5/1 6:26:23

Windows热键侦探:一键解决快捷键冲突的完整指南

Windows热键侦探&#xff1a;一键解决快捷键冲突的完整指南 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 当你按下熟悉的CtrlC准备复制文本&am…

作者头像 李华
网站建设 2026/4/30 9:00:45

系统权限管理工具技术解析与应用实践

系统权限管理工具技术解析与应用实践 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中&#xff0c;系统权限管理工具作为平衡教学控制与学习自主的关键技术解决…

作者头像 李华
网站建设 2026/5/1 6:25:34

JFlash驱动中Flash Bank管理操作指南

JFlash中的Flash Bank管理&#xff1a;从原理到实战的完整指南 在嵌入式开发的世界里&#xff0c;固件烧录早已不再是“一键下载”那么简单。随着系统复杂度飙升&#xff0c;尤其是汽车电子、工业控制和物联网设备对可靠性和可维护性的严苛要求&#xff0c;传统的整片擦写方式…

作者头像 李华
网站建设 2026/5/1 2:34:38

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架&#xff0c;API文档和API定义同步更新&#xff0c;可以在线测…

作者头像 李华