美文网首页
Jackson关于Boolean类型反序列化问题

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

作者: 我要做大牛23333 | 来源:发表于2019-10-30 15:19 被阅读0次

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

调用方传递的是:

{
  "isOfficial": true
}

而接收方依赖于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。

【强制】POJO类中的任何布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。

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

相关文章

网友评论

      本文标题:Jackson关于Boolean类型反序列化问题

      本文链接:https://www.haomeiwen.com/subject/lhwovctx.html