@DateTimeFormat和@JsonFormat

大唐冠军侯發表於2024-05-24

@DateTimeFormat@JsonFormat 是 Spring 和 Jackson 中用於處理日期時間格式的註解,它們有不同的作用:

@DateTimeFormat

@DateTimeFormat 是 Spring 框架提供的註解,用於指定字串如何轉換為日期時間型別,以及如何格式化日期時間型別成字串。通常用於 Spring MVC 控制器方法的引數或物件屬性上。

示例用法:

public class MyRequest {
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date date;
    
    // getters and setters
}

在這個示例中,@DateTimeFormat 註解指定了日期字串的格式,以便將其轉換為 Date 型別。

@JsonFormat

@JsonFormat 是 Jackson 庫提供的註解,用於指定 JSON 序列化和反序列化時日期時間型別的格式。通常用於 POJO 類的屬性上,以影響 JSON 格式的輸出。

示例用法:

public class MyResponse {
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dateTime;
    
    // getters and setters
}

在這個示例中,@JsonFormat 註解指定了日期時間的格式,以便 JSON 序列化和反序列化時使用。

區別

  • @DateTimeFormat 是 Spring 框架提供的,用於處理字串到日期時間型別的轉換和格式化。
  • @JsonFormat 是 Jackson 庫提供的,用於處理 JSON 格式到日期時間型別的轉換和格式化。

雖然它們的功能有些重疊,但它們的使用場景不同:@DateTimeFormat 用於處理 HTTP 請求引數的轉換,而 @JsonFormat 用於處理 JSON 資料的序列化和反序列化。

實際應用場景

Controller中使用Java物件接收前端傳來的查詢引數,這個時候需要使用@DateTimeFormat來格式化前端傳來的日期格式,如果這個物件只是作為查詢引數,那麼只需要加@DateTimeFormat 這一個註解就夠了,如果同時作為返回VO,那麼就得加上 @JsonFormat用於 JSON 資料的序列化和反序列化。
還有一個場景,就是物件雖然沒有作為VO使用,但是作為Feign介面的查詢物件,這個時候也涉及了 JSON 資料的序列化和反序列化,所以也得加上@JsonFormat。另外,Feign不支援使用GET請求但是使用物件作為引數,如果要使用物件作為引數,必須適應POST方法。

相關文章