前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)

前后端时间传递之注解形式(@DateTimeFormat与@JsonFormat)

作者头像
botkenni
发布2023-07-24 21:34:19
2.3K0
发布2023-07-24 21:34:19
举报
文章被收录于专栏:IT码农IT码农

一、前言

在我们开发的过程中常常会遇到前后端传递时间的问题,同样遇到了这样的问题,以前的做法是在代码中转换:前端传String类型的时间,然后后端用String接收以后存入数据库时再转化为Date;返回给前端时也是一样,先从数据库中查出Date类型的数据,返回给前端时转化为String,非常麻烦。后来也是看到了用注解的方式非常方便,在这里记录并共享一下。

二、前端传后端(@DateTimeFormat)

前端给后端传递时间参数的时候传递的都是String类型的数据,后端如果用数据库类型Date来接收的话,则会报 异常。此时后端如果在对应的时间字段上加上 @DateTimeFormat 注解,就可以解决这个问题,而且在存入数据库 的时候依然用这个字段,而不用再进行类型转化。

2.1 场景

前端传过来的时间参数为String类型的数据的时候,就可以用如下的注解方式去接收数据,需要注意的是,注解中 的样式如果为yyyy-MM-dd HH:mm:ss的话,前端穿的时候必须是这样的格式,如果前端只传yyyy-MM-dd的话,就 会报异常。

2.2 例子

    //此时库里datetime类型的数据可以用Date类型直接进行存储      @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")     private Date createTime;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")     private Date updateTime; 注意:这里的Date是在java.util.Date;这个包下面的,不要引用错误了。

三、后端传前端

3.1 场景

后端传递给前端去展示时间的时候也是将时间转化为String类型的时间数据去返回。此时就需要加上 @JsonFormat 注解来解决这个问题。

3.2 例子

    //这里就可以根据前端需要展示的时间格式进行返回,修改patter样式即可     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")     private Date createTime;

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

注意:这里的这个注解是在com.fasterxml.jackson.annotation.JsonFormat;这个包下的。并且时区记得加上,不然时间会少八个小时。

四、java.sql包下的Date用法

4.1 说明

当前端展示为yyyy-MM-dd时并且后端也存为yyyy-MM-dd的时候可以用java.sql包下的Date来作为时间数据 类型,此时后端无需做任何处理即可接收到前端传过来的该格式的数据。后端返回时也无需处理就会直接将该格式 的数据返回。

注意:和数据库映射的类中的时间格式也要用java.sql包下的Date类型。如果用java.util包下的Date则要用上面的注解进行处理。

4.2 结果测试

4.2.1 swagger请求传参
4.2.2 接口

@RestController @RequestMapping("/test") public class TestController {

    @Resource     TestService testService;

    @PostMapping("/save")     public TestVO save(TestDTO testDTO) {         //测试类         Test test = new Test();         //属性拷贝         BeanUtils.copyProperties(testDTO, test);         boolean save = testService.save(test);         //如果新增成功就把该数据转化为Vo的形式返回         if (save) {             Integer id = test.getId();             Test testObj = testService.getById(id);             TestVO testVO = new TestVO();             BeanUtils.copyProperties(testObj, testVO);             return testVO;         }         return null;     }

}

4.2.3 接口中用到的实体类

//实体类1 @Data @EqualsAndHashCode(callSuper = true) @TableName(value = "test", autoResultMap = true) public class Test extends BaseEntity{

    private static final long serialVersionUID = 1L;

    /**      * 姓名      */     private String name;

    /**      * 地址      */     private String address;

}

//公共实体类2,Model是mybatis-plus的类 @Data public class BaseEntity<T extends Model> extends Model {     /**      *      */     private static final long serialVersionUID = 1L;     /**      * 主键      */     @TableId(value = "id", type = IdType.AUTO)     @ApiModelProperty(value = "主键")     protected Integer id;

    /**      * 逻辑删除标识      */     @TableLogic(value = "false", delval = "true")     @ApiModelProperty(value = "逻辑删除标识")     private Boolean deleted = Boolean.FALSE;

    @ApiModelProperty(value = "创建时间")     private Date createTime;

    @ApiModelProperty(value = "更新时间")     private Date updateTime;

    @Override     protected Serializable pkVal() {         return this.id;     }

4.2.4 返回结果
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、前端传后端(@DateTimeFormat)
    • 2.1 场景
      • 2.2 例子
      • 三、后端传前端
        • 3.1 场景
          • 3.2 例子
          • 四、java.sql包下的Date用法
            • 4.1 说明
              • 4.2 结果测试
                • 4.2.1 swagger请求传参
                • 4.2.2 接口
                • 4.2.3 接口中用到的实体类
                • 4.2.4 返回结果
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档