@DateTimeFormat 和 @JsonFormat 是 Spring 和 Jackson 中用於處理日期時間格式的註解,它們有不同的作用: @DateTimeFormat @DateTimeFormat 是 Spring 框架提供的註解,用於指定字元串如何轉換為日期時間類型,以及如何格式化日 ...
@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
方法。