打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于@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起作用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java 关于时间返回结果与参数的注解@DatetimeFormat和@JsonFormat
LocalDateTime去掉T
日期转换工具类
Java常用的时间工具类DateTimeUtils.java对常用的时间操作方法总结
问题:Cannot deserialize value of type `java.util.Date` from String “2020
Swift 日期转换
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服