gin处理日期字段

原创
2022/09/08 08:33
阅读数 51

1、背景

    某字段如join_date的类型是datetime,值从前端页面输入。

2、现象

    在结构体中,如果改属性类型定义成time.Time或*time.Time, 则前端输入的值,无法通过c.ShouldBindJSON()函数接收。而且,在不报任何错误的情况下,弄丢了其他属性的值。

3、解决方案

    一是定义新的结构体,join_date的类型设为string,在保存或更新时,把这个新结构体转换成原先的结构体,转换时,把string类型的join_date值,通过time.Parse()函数,转换成time.Time类型,这样就能成功保存。

    二是在原来的结构体上,添加一个属性,该属性的类型为string,看起来像这样:

    

JoinDate       *time.Time      `gorm:"column:join_date; type:date" json:"-"`                  //
JoinDateStr    string          `gorm:"-" json:"join_date"`                                    //

JoinDate为time.Time类型,json:"-"表示不序列化该属性,因为要留给JoinDateStr属性用;JoinDateStr为string类型, gorm:"-"表示该属性不需要解析成数据库表的字段。

在保存的时候,将JoinDateStr的值,转换成time.Time类型,赋值给JoinDate属性,这样就可以将前端输入的日期字符串,保存到数据库。

这种定义方式有一个问题,就是查看详情的时候,JoinDateStr属性没有值,需要把JoinDate属性的值,通过Format()函数转换成string,然后赋值给JoinDateStr。如果允许返回的json对象多一个额外定义时,可以将JoinDate属性的json:"-",改成json:"join_date_str"。这样前端直接取join_date_str的值就可以了,后端也不需要多转换一次。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部