实在看不下去网上千篇一律的回答都是
@DateTimeFormat用于前端传给后端的时间格式转换,
@JsonFormat用于后端传给前端的时间格式转换
这种以偏盖全的荒谬理论真的是误人子弟!为此本人将自己调查理解的浅陋见解分享给大家,如有错误请大家多多指教
@JsonFormat注解
出处: ;
作用:将日期类型数据在JSON格式和对象之间转换。约束时间的接收格式和响应格式 (接收和响应的都是JSON字符串) .与传输方向没有关系(前端到后端or后端到前端都可以使用)
常用注解属性:
名称 | 作用 |
---|---|
pattern | 时间格式:pattern=“yyyy-MM-dd HH:mm:ss” |
timezone | 指定具体时区: timezone = “GMT+8” or timezone = “Asia/Shanghai” |
注意因为我们是东八区(北京时间),使用时需要加上时区( timezone = “GMT+8”),不然所得值会比实际时间晚8小时;
举个例子
@Data
public class pojo{
@JsonFormat(pattern = "yyyy-MM-dd hh", timezone = "GMT+8")
private Date date;
}
@DateTimeFormat注解
出处:
作用:主要对Date、Calendar、Long及Joda时间类型的属性进行格式化处理,主要处理前端时间类型与后端pojo对象中的成员变量进行数据绑定,所约束的时间格式并不会影响后端返回前端的时间类型数据格式;
常用注解属性:
名称 | 作用 |
---|---|
iso | 类型为,常用值: :格式为yyyy-MM-dd .DATE_TIME:格式为yyyy-MM-dd hh:mm: :格式为hh:mm: :表示不使用ISO格式的时间(默认值) |
pattern | 类型为String,使用自定义时间格式化字符串,如"yyyy-MM-dd hh:mm:ss" |
style | 类型为String,通过样式指定日期时间的格式,由两位字符组成, 第一位表示日期的样式,第二位表示时间的格式,以下是几个常用的可选值: S:短日期/时间的样式 M:中日期/时间的样式 L:短日期/时间的样式 F:完整日期/时间的样子 -:忽略日期或时间的样式 默认值 style=“SS” |
注意事项:前端入参数据的时间格式必须与注解中定义的时间格式相同
举个例子:
@Data
public class query{
@DateTimeFormat(pattern = "yyyy-MM-dd hh")
private Date date;
}
@JsonFormat 和 @DateTimeFormat 区别
- @JsonFormat既可以约束前端传入的时间类型参数格式,也可以约束后端响应前端的时间类型格式;与请求的数据类型有关,必须为json类型
目前大部分java项目都是使用json的方式传输前后端数据(即前端使用json提交,后端使用@RequestBody注解接收参数的形式),使用 @JsonFormat即可 - @DateTimeFormat只能约束前端传入的时间类型参数格式,且如果单独使用@DateTimeFormat时,响应给前端的时间会比实际时间晚8个小时(时区原因)。
仅支持**【表单键值对】**这种提交方式,而且只能格式化前端->后端数据,不能用于json格式的提交方式,也不能用于后端->前端的格式化