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