@DateTimeFormat 和 @JsonFormat 注解详解

本文深入探讨Java中日期处理的关键问题,包括前后端日期格式的差异、@DateTimeFormat和@JsonFormat注解的应用及区别,以及如何统一全局日期格式。

这一篇文章足以让你对Java当中Date时间上的理解更上一层楼,本篇文章主要通过代码的形式来进行试验,彻彻底底搞明白日期传参,以及日期返回参数的格式相关问题,每一个步骤都会记得特别详细!

本篇文章主要针对以下三点,来进行代码试验:

  1. 不使用这两个注解,前端传参和后端返回参数 格式是什么样的?
  2. @DateTimeFormat究竟在什么时候用?
  3. @JsonFormat在什么时候用?
  4. 二者有什么区别?

总结

如果想要看详细测试过程的,可以看下面的每一步骤,如果着急要结果的,看总结足矣!

@DateTimeFormat和@JsonFormat都是处理时间格式化问题的!

区别 @DateTimeFormat @JsonFormat
使用方法 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
使用场景 URL传参时,格式化前端传向后端日期类型的时间格式 JSON传参,格式化前端传参和后端返回给前端的时间格式,传参可能不一定是json,但是一般接口向前端返回数据,基本上都是封装的统一返回格式,然后JSON返回。所以这个注解是一定要加的!
使用地方 实体类日期字段上、或者字段的set方法上、或者方法入参上 实体类日期字段上、或者字段的set方法上、、或者方法入参上
来源 org.springframework.format.annotation com.fasterxml.jackson.annotation

注意:

  1. 一旦使用yyyy-MM-dd 格式,如果传时分秒就会报错,或者是使用 yyyy-MM-dd HH:mm:ss,如果传yyyy-MM-dd 也会报错。
  2. 假如是springboot项目的话,使用这两个注解是不用导其他的依赖包的!
  3. 框架当中默认他会认为 前端传的是UTC时间,然后SpringMVC在接到参数的时候,会进行转换为本地区时间,向前端返回参数的时候会转换为UTC时间!
  4. 这两个注解可以选择在实体类的set方法当中使用,也可以在字段上使用,效果是一样的!

一、不使用注解

首先准备一张表:时间我使用的mysql是datetime类型,存储到数据库的格式是 yyyy-MM-dd HH:mm:ss

注意这个格式是mysql的DATETIME字段类型格式,也就是我们使用mybatis也好,plus也罢,只要是日期类型,不管传的时候是什么格式,存到数据库之后都会变成这个格式!

CREATE TABLE `student`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `create_date` datetime NULL DEFAULT NULL,
  `upload_date` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

实体类:我用的是mybatis-plus框架做的试验,本篇mybatis-plus不是重点,重点要看的是日期类型格式

@TableName(value = "student")
@Data
@ToString(callSuper = true)
public class Student implements Serializable {
   
   

    @TableId(type = IdType.AUTO)
    private Integer id;

    @TableField(value = "name")
    private String name;

    @TableField(value = "create_date")
    private Date createDate;

    @TableField(value 
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值