JAVA 实体类对日期的格式化、序列化日期时间

通过百度查询,找到了3种方式

1.@JsonFormat和@JSONField是处理请求参数为json格式的时间
例如前端传送时间为“2020-08-12 23:28:00”,使用@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”),这两者前面都带JSON,接收请求和返回数据格式为json时,注解生效。JSONField目前最长的用属性是@JSONField(name=”resType”)和 @JSONField(format=”yyyy-MM-dd”)

2.@DateTimeFormat也是处理时间格式,但它不支持反序列化,也就是不能转化前端数据格式为json。它能接收表单形式的时间格式,直接使用注解@DateTimeFormat(pattern=”yyyy-MM-dd”)

3.总结
前端读取数据库日期字段时使用 @JsonFormat和@JSONField 可以将时间戳转为格式化的日期数据。
前端使用JSON提交时用@JsonFormat和@JSONField
前端使用Form提交时用@DateTimeFormat

 @DateTimeFormat将入参date类型格式化为指定格式传入 ,@JsonFormat将结果date类型以指定格式展示。

对于@RequestBody的请求@DateTimeFormat不起作用,@JsonFormat对它的入参和出参都起作用。@RequestParam时@DateTimeFormat才有作用。
参考链接:https://blog.csdn.net/weixin_41712768/article/details/107969184

解决方案 一
(不是太推荐,因为不可能所有的实体类都去加这个注解,这也是我们昨天头疼的问题)
给实体类上面加上
@JsonFormat 反序列化 格式化日期时间注解

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
解决方案 二
我觉得最好使的办法

可以在Spring的全局配置文件application.yml中添加以下配置即可: spring: jackson: date-format: "yyyy-MM-dd HH:mm:ss " time-zone: "GMT+8" mvc: date-format: "yyyy-MM-dd HH:mm:ss " 以上配置等同于在字段上添加注解: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 如果你字段时间不要yyyy-MM-dd HH:mm:ss格式的,可以通过在字段上添加注解方式格式化日期,当然如果你只需要年月日,可以将表对应的字段设置为Date(年月日)而不是DateTime(年月日时分秒)类型

spring:
  jackson:
    serialization:
      write-dates-as-timestamps: true
    time-zone: GMT+8
    default-property-inclusion: non-null
    date-format: yyyy-MM-dd HH:mm:ss
这个问题,我们项目组好几个同事,直接干到11点;第二天找了以上午才找到;
参考原文链接:https://blog.csdn.net/qq_45010998/article/details/121957318

相关文章

暂无评论

暂无评论...