天天看點

@JsonFormat與@DateTimeFormat注解的區分和使用@JsonFormat與@DateTimeFormat注解的區分和使用

@JsonFormat與@DateTimeFormat注解的區分和使用

1.背景

時間問題一直是個比較頭疼的問題。 以背景為基準參考:我們想要在背景對從資料庫、第三方API接口擷取到的時間進行“格式化”需要用到【@JsonFormat】注解;我們通過背景給前台傳遞指定格式的時間也是通過【@JsonFormat】;如果是背景接收前台傳來的時間進行格式化需要用到【@DateTimeFormat】。

@JsonFormat是jackson包的。

[email protected]代碼示例

步驟

1.使用maven引入@JsonFormat所需要的jar包,我貼一下我這裡的pom檔案的依賴

<!--JsonFormat-->
  
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.8</version>
        </dependency>
  
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.8</version>
        </dependency>
  
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
           

2.在你需要查詢出來的時間的資料庫字段對應的實體類的屬性上添加@JsonFormat

import java.util.Date;
  
import com.fasterxml.jackson.annotation.JsonFormat;
  
public class TestClass {
  
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("開始時間")
    private Date startTime;

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("結束時間")
    private Date endTime;
}
           

這裡解釋一下:@JsonFormat(pattern=“yyyy-MM-dd”,timezone = “GMT+8”):

pattern:是你需要轉換的時間日期的格式

   timezone:是時間設定為東八區,避免時間在轉換中有誤差
           

提示:@JsonFormat注解可以在屬性的上方,同樣可以在屬性對應的get方法上,兩種方式沒有差別

3.完成上面兩步之後,我們用對應的實體類來接收資料庫查詢出來的結果時就完成了時間格式的轉換,再傳回給前端時就是一個符合我們設定的時間格式了

注意

背景debug是看不出背景給前台格式的時間的,隻有在前台才能看到。

@JsonFormat與@DateTimeFormat注解的區分和使用@JsonFormat與@DateTimeFormat注解的區分和使用
@JsonFormat與@DateTimeFormat注解的區分和使用@JsonFormat與@DateTimeFormat注解的區分和使用

[email protected]代碼示例

步驟

[email protected]的使用和@jsonFormat差不多,首先需要引入是spring還有jodatime,spring我就不貼了

<!-- joda-time -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.3</version>
        </dependency>
           

2.在controller層我們使用spring mvc 表單自動封裝映射對象時,我們在對應的接收前台資料的對象的屬性上加@@DateTimeFormat

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

我這裡就隻貼這兩個屬性了,這裡我兩個注解都同時使用了,因為我既需要取資料到前台,也需要前台資料傳到背景,都需要進行時間格式的轉換,可以同時使用

3.通過上面兩個步驟之後,我們就可以擷取一個符合自定義格式的時間格式存儲到資料庫了

總結:

注解@JsonFormat主要是背景到前台的時間格式的轉換

注解@DataFormAT主要是前後到背景的時間格式的轉換