Mybatis Datetime日期类型返回Json数据格式化处理
@JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date createTime;
在我们使用Mybatis开发时,针对数据库Datetime
日期类型或者Timestamp
日期类型时,在Mapper映射为Domain
实体并通过@ResponseBody
转为json
格式的数据返回时,我们会发现,日期类型数据往往不是我们想要的格式,我们需要对其统一做格式化处理。
一、问题阐述
首先,大家看下问题产生的情形:
1)数据库日期字段类型,以创建时间为例:
- create_time datetime NOT NULL
2)实体中对应的Java字段类型
- private Date createTime;
3)Mapper.xml中的映射配置
- <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
接着,我们请求后返回的json数据,它的日志格式如下:
- "createTime": "2021-09-07T03:21:28.000+00:00"
而数据库的时间为2021-09-07 11:21:28
,发现不仅格式不是我们想要的,而且时间还差了8小时,也就是时区也存在问题。
二、解决方案
解决该问题有两个办法:
方法1、统一配置实现格式化
1) 我这里是SpringBoot项目,首先最简单粗暴的方式就是直接统一配置进行格式化,依赖jackson包,另外我们需要在application.yml
新增如下配置:

spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8
如果是application.properties
格式文件则配置如下:
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
亲测经过该配置之后,确实返回结果都实现了统一,而且时区问题也解决了。
方法2、注解配置(借助jackson注解)
我们也可以在实体类的时间字段上使用注解来针对性的格式化日期(依赖jackson包)类似如下:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") private Date createTime;
这样相对配置会多一些,但可以满足不同情形下对不同日期格式的定制化需求。
据说第一种统一配置的方法,针对请求日期格式的入参也必须满足此格式。
方法3、注解配置(借助fastjson注解)
此方法依赖fastjson包:
@JSONField(format = "yyyy-MM-dd HH:mm:ss") private Date createTime;
总结
该两种方法可以合用,而且第二种优先级较高,也就说两种你都配置,会以@JsonFormat
为准,如果没加@JsonFormat
注解则默认会使用统一配置的格式,这样灵活性更好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!