我觉得我这篇文章价值一个亿,工作开发实际需求(@JsonSerializer,@JsonInclude使用 和毫秒值的格式化)

博客围绕返回给前端的JSON数据处理展开,包括将日期类型从毫秒值转换为秒、处理null字段不返回前端、null字段返回空数组或空字符串等需求,并给出了相应的实现方法,如创建序列化类、使用注解、全局配置及字段初始化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

原谅我标题党 ,不过用起来是真的牛逼呀 。 

需求一: 我们返回给前端json数据,那么你会发现我们的日期类型是毫秒值,我们前端呢 规定好要的是秒 而不是毫秒 

做法入下:

 

创建一个序列化类 我们这里取名叫做Date2LongSerializer 并且继承JsonSerializer<Date>

重写父类的serialize方法

在方法里面对数据做出处理 : 

根据我们的需求:


public class Date2LongSerializer extends JsonSerializer<Date> {

    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
 
 

        jsonGenerator.writeNumber( date.getTime()/1000);

    }
}

然后在VO实体类做处理 :

 @JsonSerialize(using= Date2LongSerializer.class)
    private Date createTime ;
    @JsonSerialize(using= Date2LongSerializer.class)
    private Date updateTime ;

在我们的需要处理的字段上面使用该工具类(算是工具类)

@JsonSerialize(useing=Date2LongSerializer.class)

这样在通过调试就看到效果了  。 

为什么价值一个亿呢? 

通过这个例子我们可以举一反三,用来处理一些返回VO数据了。

需求二: 

咦你看 ,orderDetailList这个字段为null ,前端处理比较麻烦 那么我们的需求就是  如果为null 的话 那么我们就不传送给前端 ,

如果有值的话还是传送 这个需求怎么实现呢 ?  

我们只需要在实体类上面标注上@JsonInclude(JsonInclude.include.not_null)就解决了 (原谅我的排版,和无限装逼的心抱歉)

还有问题,你看如果有很多VO难道在每一个VO的实体类上面都要加这个@JsonInclude(JsonInclode.include,non_null)这个注解 这也有点太麻烦了吧,o?  有没有全局 配置的方法 ?  哈哈哈哈哈好当然有了-->

在application.yml里面配置

spring.jackjson.default-property-inclusion : non-null

这也的话 我们就是实现了我们的需求了。 

需求三:

需求三是在我们需求二之上 的 。 需求二是我们返回给前端的不能为null ,如果是null的话就该字段就不返回了。 这是其一; 

那么如果我们说 如果是null  还需要返回 ,比如说 如果一个List字段 我没有值  那好 我们返回空数组就好的呀 。 如果是个String类型 我们返回给他的一个空字段串就可以了。 前端的约定就这样。 这也怎么弄呢? 

 

注意: 首先把需求二的全局配置spring.jackjson.default-property-inclusion:non-null  这个配置注释掉。

很简单 >  只需要 在VO实体类中 给这个字段初始化   如果 List xx = new ArrayList(); 这也就达到目的了  ,String xx=""; 

 

 

OK;

 

 

怎么样? 是不是很强大? O ?   respact 。

 

 

 

 

 

 

-----------------------------------------------------------------分割法  下面补充和上面关系不大------------------------------------------------------------

 

查缺补漏: 

时间的格式化:

毫秒值 怎么转换为时间日期格式 :

String times= "1557045866"

Date  date = new Date(times);

String form= new SimpleDateFormat("yyyy-MM-ss HH:mm:ss").format(date );

日期格式转换为毫秒值:

String date ="2019-5-2 12-12-00";
Date  date=  new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").parse(date);
date.getTime();//得到毫秒值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值