解决前端显示和后台存储数据单位不一致的问题。
在返回对象时,进行自定义数据格式转换。
1.写一个类继承JsonSerializer 抽象类, 实现其serialize()方法,然后在方法中写入转换规则即可
举例是把Date时间戳从 毫秒 转换成 秒 为单位
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;
/**
 * @program: sell
 * @description: 时间转换Json序列化工具
 * @author: Liang Shan
 * @create: 2019-08-06 16:58
 **/
public class Date2LongSerializer extends JsonSerializer<Date> {
    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeNumber(date.getTime() / 1000);
    }
}
2.然后在传输的实体类中的属性上打上@JsonSerialize注解即可
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ls.sell.enums.OrderStatusEnum;
import com.ls.sell.enums.PayStatusEnum;
import com.ls.sell.util.serializer.Date2LongSerializer;
import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @program: sell
 * @description: 订单主表
 * @author: Liang Shan
 * @create: 2019-07-24 09:44
 **/
@Entity
@Data
@DynamicUpdate
public class OrderMaster {
    @Id
    private String orderId;
    private String buyerName;
    private String buyerPhone;
    private String buyerAddress;
    private String buyerOpenid;
    private BigDecimal orderAmount;
    /** 订单状态,默认为新下单. */
    private Integer orderStatus = OrderStatusEnum.NEW.getCode();
    /** 支付状态,默认为0未支付. */
    private Integer payStatus = PayStatusEnum.WAIT.getCode();
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date createTime;
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date updateTime;
}3.附加:还有一个比较好用的注解,如果返回对象中变量存在null,可以使用@JsonInclude(JsonInclude.Include.NON_NULL)注解来忽略为null的变量,这样前端比较好处理
package com.ls.sell.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ls.sell.entity.OrderDetail;
import com.ls.sell.entity.OrderMaster;
import lombok.Data;
import java.util.List;
/**
 * @program: sell
 * @description: 数据传输对象,传给前端时忽略值为null的属性
 * @author: Liang Shan
 * @create: 2019-07-25 16:05
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO extends OrderMaster {
    private List<OrderDetail> orderDetailList;
}使用注解之前的返回值:
使用注解之后:

还是比较好用的。
4.附加:之前附件3的注解,还是有个问题,如果一个一个实体类配置的话,未免太过麻烦,所以可以在配置文件中直接配置,yml配置文件如下:
