jackson序列化与反序列化

背景

        业务背景是这样的,之前项目数据库的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 注解即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值