记fastjson序列化实体遇到的问题

在日常工作中遇到fastjson将字符串转换为实体时,默认给int类型非必填字段赋值0的问题。通过将实体类中height字段从int改为Integer解决此问题,但后来引发序列化异常。研究fastjson源码后,采用NotWriteDefaultValue注解避免序列化默认值,成功解决问题。

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

日常工作中,难免遇到字符串和实体之间的互相转换情况

起初,实体类设计如图

很单纯的一个实体类,其中年龄age和身高height用int来定义(这里假如height非必填),但是在实际工作中发现当我对字符串通过fastjson进行转实体的时候,会默认给height赋初始值0

如图,str里明明只给age和name赋值,但是在实例化的实体里,竟然height也有了初始值0,这对于强迫症的我来说简直不能容忍。

机智的我一看这个情况,就推测出一定是因为实体里用int来修饰height,在初始化的时候会默认给int型变量赋值0造成的,于是手到擒来把实体里的height改为Integer

测试之后发现一次通过,爽的一匹,并暗暗窃喜觉得实体里int型以后都用Integer来定义,谁知好景不长,过了不几天测试说程序里有一处异常“com.alibaba.fastjson.JSONException: write javaBean error, fastjson version 1.2.41, class User”

拿过异常一看,发现是自己擅自用Integer来定义变量导致序列化的时候失败

通过查看fastjson源码发现其支持如下的序列化方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值