@JsonFormat註解轉換時間錯誤問題解決方案

在和前端小夥伴對接接口的時候,前端小夥伴問我能不能後臺處理一下createTime的返回格式。如圖:

 

image.png

 

我想,這很簡單啊。就在後臺返回的屬性家加了@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")註解

@JsonFormat 簡單介紹

@JsonFormat註解是一個時間格式化註解,比如我們存儲在mysql中的數據是date類型的,當我們讀取出來封裝在實體類中的時候,就會變成英文時間格式,而不是yyyy-MM-dd HH:mm:ss這樣的中文時間,因此我們需要用到JsonFormat註解來格式化我們的時間。
引入fasterxml maven jar包之後,就可以在實體類屬性上面使用@JsonFormat註解了。要注意的是,它只會在類似@ResponseBody返回json數據的時候,纔會返回格式化的yyyy-MM-dd HH:mm:ss時間,你直接使用System.out.println()輸出的話,仍然是類似“Fri Dec 01 21:05:20 CST 2017”這樣的時間樣式。

    @ApiModelProperty(value = "下單時間")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

添加註解後,返回格式如下:

 

image.png

本來以爲事情已經解決了,沒想到前端小夥伴反饋時間不對,返回時間比真實下單時間早????
Google了一下,發現原來是時區的問題。
@JsonFormat 默認的時區是Greenwich Time, 默認的是格林威治時間,而我們是在東八區上,所以時間會比實際我們想得到的時間少八個小時。

解決方法:@JsonFormat加上timezone屬性

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

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

不過如果項目相關時間轉換的很多,一個個添加timezone屬性就有點麻煩了。在SpringBoot中我們可以使用如下配置,統一配置默認時區

/這裏是Springboot 中的配置方式/
spring.jackson.time-zone=GMT+8 //設置爲東八區
spring.jackson.time-zone=yyyy-MM-dd HH:mm:ss

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章