实体类时间类型属性常用注解

导读:本篇文章讲解 实体类时间类型属性常用注解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

假如有如下实体类:

import java.util.Date;
 
public class DateVo {
    private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

提供如下接口:

@RestController
@RequestMapping("/date")
public class DateController {
 
    @RequestMapping("test")
    public DateVo getDate(DateVo vo){
        System.out.println(vo.getDate());
 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date = sdf.format(vo.getDate());
        System.out.println(date);
 
        DateVo dateVo = new DateVo();
        dateVo.setDate(new Date());
        return dateVo;
    }
}

直接访问接口(参数vo: 2020-12-25 11:22:33),会抛出以下异常:在这里插入图片描述理由很简单:类型参数不匹配,传入参数vo的date为字符串类型,而要求时Date类型,这就需要入参格式化

注解一:DateTimeFormt(入参格式化)

注解@DateTimeFormt是由spring框架提供的,作用就是实现在入参格式化过程中对时间类型参数指定格式。
在这里插入图片描述
对上述实体类做如下修改:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

再次访问接口(参数vo: 2020-12-25 11:22:33),访问成功,在控制台会打印如下内容:

Fri Dec 25 11:22:33 CST 2020
2020-12-25 11:22:33

同时向前端返回:

"2020-12-25T03:40:26.625+00:00"

对于这个返回内容可能不符合前端时间格式要求,需要对其进行出参格式化

注解二:JsonFormt(出参格式化)

注解@JsonFormt是由jackson提供的,由于spring框架中默认集成的json工具是jackson(国内使用更广泛的fastjson,其提供注解@JSONField),因此使用注解@JsonFormt不需要另外引入依赖,再次对实体类修改:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(
    	pattern = "yyyy-MM-dd HH:mm:ss",
   	 	timezone = "GMT+8"
	)
	private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

继续访问接口(参数vo: 2020-12-25 11:22:33)返回:

2020-12-25 11:40:26

注意:在使用注解@JsonFormt时必须要指定时区,默认情况下为0时区,于北京时间(东8时区)相差8个小时

注解三:JSONField(出参格式化)

在国内使用更多是Alibaba 开源的fasejson,其同样提供了指定时间格式的注解。使用spring框架开发时需要注意的是spring框架中没有集成fastjson,因此需要在pom文件中引入其依赖,实体类修改如下:

public class DateVo {
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JSONField(format="yyyy-MM-dd HH:mm:ss")
	private Date date;
 
    public void setDate(Date date){
        this.date = date;
    }
    public Date getDate(){
        return date;
    }
}

当然JSONField有更多用法具体参考:JSONField

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/78221.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!