我这里做的是将实体类的Date属性以到秒的时间戳返回,因为用手写太麻烦,而且之后可能其他地方也要这样,所以这里直接在这个类的属性上声明的注解,这样在使用get方法的时候就会自动转换成秒的时间戳
首选要新建一个java bean;
这个是转换要用到的工具类
package com.chan.wechatshop.utils.serializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.util.Date;
public class Date2LongSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeNumber(date.getTime() / 1000);
}
}
下面这个是被转换的java bean,在对应的属性上声明注解 @JsonSerialize(using = Date2LongSerializer.class)就大功告成了,需要注意的是,Date2LongSerializer.class里的泛型和被转换的属性的java类型是一致的,都是Date
package com.chan.wechatshop.dto;
/**
* 定义一个业务类,不与实体类混淆,这个是一个订单主表和若干订单明细
*/
import com.chan.wechatshop.dataobject.OrderDetail;
import com.chan.wechatshop.enums.OrderStatusEnum;
import com.chan.wechatshop.enums.PayStatusEnum;
import com.chan.wechatshop.utils.serializer.Date2LongSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
public class OrderDTO {
private String orderId; //订单id
private String buyerName; //买家名字
private String buyerPhone; //买家电话
private String buyerAddress; //买家地址
private String buyerOpenid; //买家微信openid
private BigDecimal orderAmount; //订单总金额
private Integer orderStatus = OrderStatusEnum.NEW.getCode(); //订单状态,默认为新订单=0
private Integer payStatus = PayStatusEnum.WAIT.getCode(); //支付状态,默认为0新订单未支付
@JsonSerialize(using = Date2LongSerializer.class)
private Date createTime = new Date(); //创建时间
@JsonSerialize(using = Date2LongSerializer.class)
private Date updateTime = new Date(); //更新时间
private List<OrderDetail> orderDetailList;
}