@JSONField、@JsonFormat及@DateTimeFormat的入参与出参

概述

大多时候注解不会用、用错,可能是你不了解这个注解导致的,有时候做测试得出的结论也会是片面的,建议根据其所属jar包看看官方文档,来理解、找解决方案

@JSONField

结束@JSONField之前,介绍一下fastjson,fastjson是阿里的开源解析库,支持将Java Bean序列化为JSON字符串,也可以将JSON字符串反序列化为Java Bean

JSONField可以用在字段上或者getter/setter方法上,它的作用有很多,包括,日期格式化,指定不序列化的字段,指定字段的顺序

对于日期的格式化,在注解上写一下就好了,它就会按照你指定的格式输出

      @JSONField(format="yyyyMMdd")
      public Date date;

@JsonFormat

@JsonFormat是jackson提供的一个注解,主要用来控制日期和日历类型的输出格式,它可以作用在字段上,也可以作用在getter方法上。当然你也可以为它指定时区

比如

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date createdDate;

输出:

{ ... , "currentDate":"2016-12-18", ...}

@DateTimeFormat

@DateTimeFormat是SpringMVC提供的一个注解,作用的化,格式化前台的输入数据,虽然@JSONField、@JsonFormat也都可以做到,而且@DateTimeFormat不好的一点就是,从后端读取数据出来的话,是以long类型输出的,不会格式化为你想要的类型输出

做个测试:

出参,数据库类型为Date
在这里插入图片描述

在这里插入图片描述
转换为long类型。

出参,数据库类型为DateTime

在这里插入图片描述
在这里插入图片描述

转换为long类型

有没有看到。

大概总结一下吧

入参的化,其实不用太担心,无论你使用的是@JSONField、@JsonFormat及@DateTimeFormat它都将会yyyyMMdd、yyyy/MM/dd、yyyyMMdd HH:mm:ss、yyyy/MM/dd HH:mm:ss、yyyy-MM-dd、yyyy-MM-dd HH:mm:ss转换为yyyy-MM-dd或yyyy-MM-dd HH:mm:ss存储到数据库中

有时候,你前端传yyyy-MM-dd HH:mm:ss 而使用@JSONField、@JsonFormat及@DateTimeFormat指定为yyyy-MM-dd,也能正确的转换为yyyy-MM-dd HH:mm:ss存到数据库中,我想应该是fastJson、jackson、springMVC底层做了转换,以前端传过来的数据为主

但是当数据库类型为DateTime类型时,传入格式为yyyyMMdd HH:mm:ss时,@JsonFormat及@DateTimeFormat是不支持这种格式的,会报错

对于出参,@JSONField、@JsonFormat都可以转化为你想要的日期格式,而@DateTimeFormat对于格式为yyyyMMdd、yyyy/MM/dd、yyyyMMdd HH:mm:ss、yyyy/MM/dd HH:mm:ss、yyyy-MM-dd、yyyy-MM-dd HH:mm:ss都以long类型输出

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值