1. 程式人生 > 實用技巧 >@DateTimeFormat、@JsonFormat、@JSONField區別及用法

@DateTimeFormat、@JsonFormat、@JSONField區別及用法

@DateTimeFormat、@JsonFormat、@JSONField

推薦寫法:

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 
    private LocalDate birthday;

前端讀取資料庫日期欄位時使用 @JsonFormat和@JSONField 可以將時間戳轉為格式化的日期資料。

前端使用JSON提交時用@JsonFormat和@JSONField

前端使用Form提交時用@DateTimeFormat

也可以使用String接收,這樣就不用寫註解了

private String birthday;

@DateTimeFormat:

spring自帶的,將String轉換成Date,一般前臺給後臺傳值時用

@DateTimeFormat是Spring的註解,作用是限制前端傳入的時間格式,如果格式不匹配,則會丟擲異常,可以理解成一種格式限制,不加該註解,Spring也會將前端傳入的時間字串解析成Date型別

因為其用法比較單一,只用於將字串格式化成日期,在加入spring以後,直接使用註解@DateTimeFormat(pattern=”yyyy-MM-dd”)

即可。@DateTimeFormat 註解有3個可選的屬性:style,pattern和iso

屬性允許我們使用自定義的日期/時間格式。該屬性的值遵循java標準的date/time格式規範。預設的該屬性的值為空,也就是不進行特殊的格式化。通常情況下我們都是使用這個 註解做自定義格式化的。

@JsonFormat

主要用於後臺傳值到前臺,@JsonFormat是Jackson的註解,和@JSONField功能相同,將日期按照指定格式進行格式化(eg:將Date轉換成String ),模式的市區是GMT

在屬性值上 @JsonFormat(pattern=”yyyy-MM-dd”,timezone=”GMT+8”)

,如果直接使用 @JsonFormat(pattern=”yyyy-MM-dd”)就會出現2018-08-01 08:00:00的情況, 會相差8個小時,因為我們是東八區(北京時間)。所以我們在格式化的時候要指定時區(timezone )

@JSONField

@JSONField是fastjson的註解,主要進行JSON解析序列化,作用是將日期按照指定的格式,格式化為字串,返回給前端

目前最常的用屬性是@JSONField(name=”resType”)和 @JSONField(format=”yyyy-MM-dd”)

name:@JSONField(name=”resType”)主要用於指定前端傳到後臺時對應的key值,如果bean中沒有這個註解,則預設前端傳過來的key是field本身,即如果是private String name,name前端對應的key就是name才能對應上。

format :@JSONField(format=”yyyy-MM-dd”)主要用於格式化日期,比如前臺傳過來的時間是2018-07-12 17:44:08,但是通過這個註解,你存到資料庫的時間就是2018-07-12 00:00:00.