Mybatis Datetime日期類型返回Json數據格式化處理


@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;

 

在我們使用Mybatis開發時,針對數據庫Datetime日期類型或者Timestamp日期類型時,在Mapper映射為Domain實體並通過@ResponseBody轉為json格式的數據返回時,我們會發現,日期類型數據往往不是我們想要的格式,我們需要對其統一做格式化處理。

一、問題闡述

首先,大家看下問題產生的情形:
1)數據庫日期字段類型,以創建時間為例:

復制代碼
  1. create_time datetime NOT NULL

2)實體中對應的Java字段類型

復制代碼
  1. private Date createTime;

3)Mapper.xml中的映射配置

復制代碼
  1. <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />

接着,我們請求后返回的json數據,它的日志格式如下:

復制代碼
  1. "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注解則默認會使用統一配置的格式,這樣靈活性更好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM