背景
业务背景是这样的,之前项目数据库的create_time是时间戳类型的也就是
17035199990000 这种格式的,但是看清来很麻烦,所以我还是设计了一种datetime数据格式的 2023-12-25 23:59:59
本来是挺方便的,但是前端又不支持这种格式,需要返回时间戳给他,所以就需要进行序列化处理了
处理方法
普通处理方式
public class RebateActivityDetailVo implements Serializable {
@ApiModelProperty(value = "活动开始时间")
private Date startTime;
public Long getStartTime() {
return startTime.getTime();
}
}
本来的话这样子就行了,但是到时每个地方都需要进行一个方法的添加,看起来不是很方便,于是找到了jackson的统一处理方式,步骤如下
jackson统一处理
定义处理类
/**
* zxc_user
* time: 2023-12-20 16:07:00
* description: 把时间格式转为时间戳返回----以后就尽可能用时间戳吧
*/
public class DateToStampEnumSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers){
try {
//时间戳
long stamp = 0L;
if(value != null) {
stamp = value.getTime();
}
serializers.defaultSerializeValue(stamp, gen);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
继承JsonSerializer覆盖方法进行处理即可,其次就是使用
使用
@Data
public class RebateActivityDetailVo implements Serializable {
@ApiModelProperty(value = "活动开始时间")
@JsonSerialize(using = DateToStampEnumSerializer.class)
private Date startTime;
}
总结
其实并不复杂,主要分为两步
1. 继承JsonSerializer处理对应的数据类型
2. 在返回类上面指定 @JsonSerialize(using = DateToStampEnumSerializer.class)进行处理
如果要传输回去的,那么就是使用另一个即可,JsonDeserializer 继承实现方法,然后配合
com.fasterxml.jackson.databind.annotation.JsonDeserialize 注解即可