@DateTimeFormat//前端传来的日期格式化
@JsonFormat//后端传给前端的日期格式化
一、理解
-
@DateTimeFormat
:这个注解主要用于处理从前端传递到后端的日期和时间数据。当你的 Spring 应用程序接收到一个 HTTP 请求,并且请求参数包含日期和时间数据时,@DateTimeFormat
可以帮助你将这些数据解析为 JavaDate
或LocalDateTime
对象。 -
@JsonFormat
:这个注解主要用于处理从后端传递到前端的日期和时间数据。当你的应用程序需要将Date
或LocalDateTime
对象序列化为 JSON 格式以发送到前端时,@JsonFormat
可以帮助你控制日期和时间的格式。
这两个注解通常一起使用,以确保在前后端之间传递日期和时间数据时,数据的格式始终保持一致。
二、参数
当然可以。这两个注解都有一些可配置的参数,我会分别列出它们:
-
@JsonFormat
的参数:pattern
:定义日期/时间的格式,例如 “yyyy-MM-dd HH:mm:ss”。shape
:定义值的形状(例如,是否应视为数组)。默认值为Shape.ANY
。locale
:定义用于格式化的区域设置。默认值为空,表示使用默认的Locale
。timezone
:定义用于格式化的时区。默认值为空,表示使用默认的TimeZone
。lenient
:定义解析是否宽松。默认值为OptBoolean.DEFAULT
。
-
@DateTimeFormat
的参数:iso
:定义 ISO 格式,例如ISO.DATE
。pattern
:定义日期/时间的格式,例如 “yyyy-MM-dd HH:mm:ss”。style
:定义样式模式,例如 “SS”。
这些参数允许你对日期和时间的格式进行详细的控制。例如,你可以使用 pattern
参数来定义自己的格式,或者使用 iso
参数来使用预定义的 ISO 格式。你也可以通过 locale
和 timezone
参数来控制区域设置和时区。
三、示例
-
使用
@JsonFormat
:@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date date;
在这个例子中,
Date
对象会被序列化为 “yyyy-MM-dd HH:mm:ss” 格式的字符串,并且使用 GMT+8 的时区。 -
使用
@DateTimeFormat
:@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date date;
在这个例子中,字符串会被解析为
Date
对象,字符串的格式应该是 “yyyy-MM-dd HH:mm:ss”。
注意,@DateTimeFormat
注解没有直接的 timezone
参数,如果你需要解析的日期字符串包含时区信息,那么你需要在 pattern
中包含时区,例如 “yyyy-MM-dd HH:mm:ss Z”。如果你需要处理的日期字符串不包含时区信息,那么它将被解析为系统默认的时区。如果你的系统默认时区不是 GMT+8,你可能需要在代码中手动处理时区问题。