SpringBoot 接口返回的 JSON 數據的時間誤差8小時


最近做的一個springboot2.0項目。

前提是我的服務器時區沒有問題:

[root@wangbo ~]# date -R
Mon, 22 Apr 2019 19:24:33 +0800

可以參考:查看和修改Linux服務器的時區和時間

使用MySQL57,(程序中打印的時間字段)查詢出的時間字段總是和數據庫存儲的相差兩個小時。

最后是通過修改數據庫連接解決了這個問題。添加了下面這個屬性。

&serverTimezone=Asia/Shanghai

接着又出現問題了。

默認情況下使用 @ResponseBody ,項目返回的JSON數據,返回對象會自動轉為JSON格式,但是對象中的日期格式Date字段轉換的時候相差了八小時,程序內打印時間沒有問題,如果將 Date 改為 String 類型的話,也不會出現這種情況了。

所以問題應該出在返回結果格式化為JSON的這個過程中。

原因是spring轉json的默認實現jackson中會根據時區去轉換時間,而jackson的默認時區跟國內應該是相差8小時,所以在時間換算上自動減去了8小時。

可以通過jackson 的注解 @JsonFormat 解決問題

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

也可以在 SpringBoot 配置文件中統一配置,推薦使用這種方式:

  spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  spring.jackson.time-zone=GTM+8

 

 


免責聲明!

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



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