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

时间:2024-03-28 19:30:45

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

起初,实体类设计如图

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

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

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

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

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

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

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

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

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

通过字面意思,最终选用了NotWriteDefaultValue(不序列化默认值),测试如下

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

可以发现虽然height扔使用int来修饰,但最终序列化的字符串里没有输出height的值