@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
方法。