赞
踩
@DateTimeFormat
和 @JsonFormat
是Java中用于格式化日期和时间的注解。它们的应用场景稍有不同,但是他们的目标是相同的,那就是改变日期和时间的显示格式。
@DateTimeFormat
是Spring Framework中的一个注解,主要用于将String类型的日期时间转换为Date或者DateTime类型。
@DateTimeFormat
是Spring框架提供的注解,主要用于处理日期和时间的格式化与解析。它通常用在Spring MVC控制器的方法参数中,来绑定请求参数到日期类型,也可以用在响应模型的日期类型字段上,用于在视图渲染时的格式化。
这个注解有一些属性,例如iso
(使用ISO日期时间格式)和pattern
(自定义日期时间格式字符串)。这在处理HTTP请求参数时特别有用, 例如:
- public class Event {
- @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
- private LocalDate date;
- //...
- }
在这个例子中,date
字段期望一个ISO 8601日期格式的字符串,如"2023-08-01"。如果请求中的参数与这个格式不符,那么Spring将抛出一个异常。
以下是另外一些用法的例子:
- // 请求参数格式化
- @RequestMapping(value = "/date")
- public String getDate(@DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
- // ...
- }
-
- // 响应模型格式化
- public class MyModel {
- @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date myDate;
- // ...
- }
@JsonFormat
是Jackson库中的一个注解,用于定制Java对象序列化(转化为JSON)或反序列化(从JSON转化为Java对象)时的日期格式化。这在处理JSON数据时特别有用。例如:
- public class Event {
- @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
- private Date date;
- //...
- }
在这个例子中,当date
字段被序列化为JSON时,它将被格式化为"yyyy-MM-dd"格式的字符串,如"2023-08-01"。反过来,如果输入的JSON数据中的日期字段与这个格式不符,那么Jackson将抛出一个异常。
注意:这两个注解的工作原理都是基于Java的java.text.SimpleDateFormat
类,因此你可以在它们的pattern
属性中使用任何有效的日期和时间格式模式。
@JsonFormat
的主要属性不仅包括pattern
(日期时间格式字符串),还包含timezone
(时区)。
以下是另外一些用法的例子:
- public class MyModel {
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
- private Date myDate;
- // ...
- }
总的来说,@DateTimeFormat
更侧重于Spring MVC的请求/响应模型绑定和视图渲染,而@JsonFormat
主要用于Jackson的JSON序列化和反序列化。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。