本来以为今天又是浪浪的一天,直到中午马上要吃饭时,老大说前台页面时间显示格式不正确,我只把年月日展示了,后面的时分秒却莫名其妙丢失了,解决了好长时间,终于,被同事攻克了这个问题,所以记下笔记,以供学习。
1.误区
我一直以为后台定义的Date属性会自动把数据库中Timestamp类型的时分秒去掉,直到被同事在调试过程中用结果啪啪打脸,所以java.util.date中的date接收数据库中的Timestamp值时,是会全部接收的。而且,如果数据中字段类型是timestamp,如果不用Date类型接收,会报错:
@Temporal should only be set on a java.util.Date or java.util.Calendar property:
遇见这个错,我也是一顿百度,最后才知道,timestamp类型的字段真的不能用String,timestamp等其他类型的去接收。当时整的我都跟老大说把数据库里相关字段的类型改了吧,改成String,然后同事就跟我说找到解决办法了,就是@JSONField(format = "yyyy-MM-dd HH:mm:ss") 这个加到get方法上面就可以解决了。
2. @JSONField注解的使用
这是FastJson中的注释,主要使用在set/get方法上,常见的使用场景有三个:
1> 修改字段映射使用方法
private Integer aid;
// 实体类序列化为json字符串的时候,此类的aid字段,序列化为json中的testid字段
@JSONField(name="testid")
public Integer getAid() {
return aid;
}
// json字符串解析为类实体的时候,json中的id字段,写入此类的aid字段
@JSONField(name="id")
public void setAid(Integer aid) {
this.aid = aid;
}
2> 格式化使用方法
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
public Date getDateCompleted(...)
3> 过滤不需要序列化的字段
@JSONField(serialize = false)
public Integer getProgress() {
return progress;
}