阿里巴巴手册解释
8.【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted()。
RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异
常
很全面的解释
为什么我要在这里记录
今天在写接口文档的时候,想把之前的接口文档,返回字段补充完整,所以去调了下之前的接口,但是却发现,返回的对象里,多了几个“莫名其妙”的字段。
如图1:
图1 列表返回数据
在这里可以看到,isUnique字段返回的数据是我想要的,但是却发现还有一个unique字段,且值为true。(之前做单元测试的时候,居然没注意到!!!)
返回数据统一使用com.alibaba.fastjson序列化为String。不清楚怎么统一处理返回数据的,可参考前面有篇叫:实现ResponseBodyAdvice ...
这个时候突然想起之前leader在群里提了一个问题:
为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
同时还有一个链接(就文章开头的那个),当时很忙,只是简单的过了一遍,今天遇到了这个问题,才再次重温。
isXXX 不要随便用
就如我图里截取的一样,isUnique是Integer类型的,不是boolean类型的,但是还是会产生boolean的效果。
猜测
链接里的文章有说,fastjson在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法,得到isUnique(Integer类型会生成isXXX?),然后根据JavaBeans规则,生成unique属性?
总结
如果不是非要使用isXXX作为属性名,那么就不要使用,减少隐藏bug。否则在生产环境出现了问题,后果很严重!
尽量遵守 阿里巴巴Java开发手册
如果没有的,可找我要pdf文件。
网友评论