<strike id="j6ksu"></strike>
<th id="j6ksu"></th>
  1. <th id="j6ksu"></th>

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

    Java技術 潘老師 3個月前 (09-10) 228 ℃ (0) 掃碼查看

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

    一、問題闡述

    首先,Java潘老師帶大家看下問題產生的情形:
    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
    

    Java潘老師親測經過該配置之后,確實返回結果都實現了統一,而且時區問題也解決了。

    方法2、注解配置(借助jackson注解)

    我們也可以在實體類的時間字段上使用注解來針對性的格式化日期(依賴jackson包)類似如下:

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;
    

    這樣相對配置會多一些,但可以滿足不同情形下對不同日期格式的定制化需求。

    據說第一種統一配置的方法,針對請求日期格式的入參也必須滿足此格式,但Java潘老師沒試過就不多說了。

    方法3、注解配置(借助fastjson注解)

    此方法依賴fastjson包:

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

    總結

    Java潘老師發現,該兩種方法可以合用,而且第二種優先級較高,也就說兩種你都配置,會以@JsonFormat為準,如果沒加@JsonFormat注解則默認會使用統一配置的格式,這樣靈活性更好。


    版權聲明:本站所有文章,如無特殊說明,均為本站原創。全部下載資源版權歸原作者所有。任何個人或組織,若未征得本站同意,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。若需轉載請注明文章來源。
    本文鏈接:Mybatis Datetime日期類型返回Json數據格式化處理
    喜歡 (1)
    請潘老師喝杯Coffee吧!】
    分享 (0)
    用戶頭像
    發表我的評論
    取消評論
    表情 貼圖 簽到 代碼

    Hi,您需要填寫昵稱和郵箱!

    • 昵稱【必填】
    • 郵箱【必填】
    • 網址【可選】

    您也可以 微信登錄 來發表評論!

    韩国毛茸茸的丰满妇女