天天看點

@[email protected]注解詳解

場景

@JsonFormat注解是屬于Jackson的一個時間格式化注解,用于格式化時間。

可以在入參出參的時候就将時間格式化好。

@DateTimeFormat注解是spring的,它可以幫助我們把不是date類型的時間轉成date類型。

效果

如果前端傳來的為字元串格式的日期:“2022年07月29日 09時41分22秒”,則需要如下配置:

@JsonFormat(pattern = “yyyy年MM月dd日 HH時mm分ss秒”)

private Date createTime;

解析後存入DB中的則為:2023-02-23 09:46:12,查詢時傳回的資料則為:“2023年02月23日 09時46分12秒”

使用

1.引入依賴

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.6</version>
</dependency>
           
  1. 在java bean 屬性上添加注解
/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date payStartTime;

/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date payEndTime;

           

3.需要指定時區

JASKSON在序列化時間時是按照國際标準時間GMT進行格式化的,而在國内預設時區使用的是CST時區,兩者相差8小時,因為我們是東八區(中原標準時間),是以我們在格式化的時候要指定時區(timezone)。

中國時間(Asia/Shanghai) = 格林尼治時間(GMT)+ 8

格林尼治時間(GMT) = 世界協調時間(UTC) + 0

/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date payStartTime;

/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date payEndTime;
           

以上這個寫法雖然可以格式化,但是并不能自動轉換時間類型,需要配合@DateTimeFormat使用。

4.配合@DateTimeFormat使用

/**
* 交易開始時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date payStartTime;

/**
* 交易結束時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date payEndTime;