@JsonFormat 和 @DateTimeFormat 注解区别及作用

在JavaWeb 开发过程中,日期格式的数据传输问题需要注意。当前端传递的日期格式与后台需要的不一致时,请求会报错400,接下来我以常用的两个注解来讲述这类问题的解决。

一、@JsonFormat注解

1.引入依赖
<!--@JsonFormat依赖引入-->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.7</version>
		</dependency>
2.@JsonFormat注解的使用

在属性上加注解@JsonFormat,其中参数:
pattern:你想要其转换的日期格式
timezone:是时间设置为东八区,避免时间在转换中差8个钟

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date studyDate;

    public TestEntity(String name, Date studyDate) {
        this.name = name;
        this.studyDate = studyDate;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getStudyDate() {
        return studyDate;
    }

    public void setStudyDate(Date studyDate) {
        this.studyDate = studyDate;
    }
3.测试注解效果
 	@RequestMapping("timeTrans2")
    @ResponseBody
    public TestEntity timeTran2(){
        String name = "张三";
        Date studyDate = new Date();
        TestEntity entity = new TestEntity(name,studyDate);
        return entity;
    }
//加注解返回结果
{
 "name": "张三",
 "studyDate": "2020-06-08 14:26:41"
}
//不加注解返回结果
{
 "name": "张三",
 "studyDate": "2020-06-08T06:26:19.335+0000"
}
4.结果分析

@JsonFormat注解的作用,通过步骤3可见,其能将前端返回的时间按我们想要的日期格式传到后台,同时能设置时区,避免时间误差,未设置东八区的时间比我们系统时间慢了8个小时

二、@DateTimeFormat注解

1.@DateTimeFormat是Spring框架本身所有,所以对于Spring项目可以直接使用
2.@DateTimeFormat注解的使用
 private String name;

   @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
   private Date studyDate;

   public TestEntity(String name, Date studyDate) {
       this.name = name;
       this.studyDate = studyDate;
   }

3.测试注解效果
@Controller
@RequestMapping("/test/time")
public class TestController {
     @RequestMapping("timeTrans")
     @ResponseBody
     public TestEntity test(TestEntity entity){
         return entity;
     }
 }

postman测试,得到如下结果

{
   "name": "张三",
   "studyDate": "2020-06-08 14:31:41"
}

如果注释注解@DateTimeFormat,前端传入则会会报错400,错误请求,原因是后端需要的是日期格式,但是前端给的是String,所以需要加注解@DateTimeFormat来将前端传来的String 转为 Date类型。

注意:此处@JsonFormat也起到了时间传输的格式转换作用,如果注释该注解,将会得到如下结果:

{
    "name": "张三",
    "studyDate": "2020-06-08T06:31:41.000+0000"
}

通过此结果可以看出,如果不加@JsonFormat注解,格式不是你想要的那种,同时时间也差了8个小时

三、总结

@JsonFormat注解的作用是格式化时间类型数据传输时的格式,以自己想要的格式来展示日期,同时也设置时区,避免时间展示与想要的结果产生误差。
@DateTimeFormat注解作用则是将前端传来的字符串类型的日期转为后台需要的时间类型结果,不加此注解,请求会报错400,请求参数错误,对于此类错误要注意int类型数据传输也是一样。

  • 23
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值