Jackson关于Boolean类型反序列化问题

 我来答
影视达人17
2022-07-19 · TA获得超过5904个赞
知道小有建树答主
回答量:405
采纳率:0%
帮助的人:64.5万
展开全部

项目中遇到一个问题,有一个字段来判断这个东西是否是 官方发布 ,这个字段是布尔类型,名字叫isOfficial。

调用方传递的是:

而接收方依赖于jackson来做反序列化,得到的这个对象中isOfficial的值始终为 false ,百思不得其解。接收方这里是把isOfficial定义为primitive type的boolean,尝试把isOfficial定义为Boolean这种装箱类型后问题得到解决。

为什么呢?由于项目采用 lombok 插件,那么如果是boolean类型,它的getter和setter默认为 is 开头,比如这里isOfficial的getter就是 isOfficial() ,那么反序列化的时候其实认为的key为 official 而不是 isOfficial ,而改成Boolean后,getter/setter的名字都变为了 getIsOfficial() ,而且寻找要反序列化的key的时候是去找 isOfficial ,这就对上了。

这里才彻底理解了阿里巴巴Java规范手册里写的,为什么boolean值不要以is开头,因为真的不同的序列化工具会用不同的命名规范,最终导致各种各样的bug。

这些规定真的是经过大量工程实践总结出来的精华。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式