springboot @JsonSerialize 的使用

您所在的位置:网站首页 jsonserialize注解序列化内层对象字段失效 springboot @JsonSerialize 的使用

springboot @JsonSerialize 的使用

2024-07-11 09:40| 来源: 网络整理| 查看: 265

解决前端显示和后台存储数据单位不一致的问题。

在返回对象时,进行自定义数据格式转换。

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 { @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 orderDetailList; } 使用注解之前的返回值:

使用注解之后:

还是比较好用的。

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3