关于@JsonFormat和@DateFormat问题
Posted lqwh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于@JsonFormat和@DateFormat问题相关的知识,希望对你有一定的参考价值。
今天在调试web应用的时候,碰到时间序列化和反序列化问题,网上查的资料一般都是关于 @JsonFormat 和 @DateFormat
网上好多说的是 @JsonFormat 是 把 对象转 string 即序列化起作用,@DateFormat 是string 转 对象 即反序列化起作用,也有的说 @JsonFormat 序列化和反序列化都有作用。
其实问题不是这个简单,到底谁起作用是有条件的。
1、当前端请求 content-Type 为 application/json 时
请求到后端 string 转 对象 是 @JsonFormat 起作用。
domain文件
controller层
postman发请求。
从上面可以看出,后端反序列化出错
现在我把注解换下,如下
public class Test @JsonFormat(pattern = "yyyy-MM-dd") // @DateTimeFormat(pattern = "yyyy-MM-dd") private Date date1; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date date2; public Date getDate1() return date1; public void setDate1(Date date1) this.date1 = date1; public Date getDate2() return date2; public void setDate2(Date date2) this.date2 = date2;
此时后端能调通,且返回的结果时间格式是正确的,我们可以发现这种情况下@JsonFormat在反序列化和序列化过程都起作用了。
2、当请求类型:content-Type 为 form-data
此时domain还和上面一样,请求url换func1,因为这里content-Type 为 form-data
把注解换成如下
public class Test // @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date date1; // @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date date2; public Date getDate1() return date1; public void setDate1(Date date1) this.date1 = date1; public Date getDate2() return date2; public void setDate2(Date date2) this.date2 = date2;
此时能调通,string 转 对象 @DateFormat起作用。
把domain改为:
public class Test @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date date1; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date date2; public Date getDate1() return date1; public void setDate1(Date date1) this.date1 = date1; public Date getDate2() return date2; public void setDate2(Date date2) this.date2 = date2;
结果:
此时 前端传后端string 转 对象是@DateFormat 起作用,后端传前端 对象 转string 是@DateFormat起作用。
总结:
1、@JsonFormat有序列化(对象转string)和反序列化(string转对象)的作用。
2、当前端数据类型为application/json时@JsonFormat一个注解就可以起到序列化和反序列化的左右。
3、当前端数据类型为multipart/form-data是,前端传后端 string转date @DateFormat起作用,后端传前端 @JsonFormat起作用。
以上是关于关于@JsonFormat和@DateFormat问题的主要内容,如果未能解决你的问题,请参考以下文章
关于 @DateTimeFormat 和 @JsonFormat 的区别以及springboot接口传Date的时候如何传参
@JsonFormat注解和@DateTimeFormat注解异同点
@JsonFormat注解和@DateTimeFormat注解异同点