您的位置:首页 > 编程语言 > Java开发

Javebean声明boolean类型isXXX解析异常

2017-07-17 16:04 274 查看
JavaBean规范中规定
boolean
getter/setter
isXXX/setXXX
,包装类
Boolean
getter/setter
getXXX/setXXX
,其中
XXX
为变量名(IDE生成代码默认就是这种格式)。

当编写代码出现不规范命名,将
boolean
变量声明为
isXXX
时,为了保证序列化与反序列化,需将
isXXX/setXXX
改为
isIsXXX/setIsXXX
,然而IDE并不会为我们做这些。

此时如果使用老版本fastjson进行反序列化时就有可能出现问题,因为fastjson默认使用
setter
方法为对象的变量赋值。
解决方案简单粗暴,更新版本fastjson-android>=1.1.49或者使用JSONField注解指定name。 然而使用Gson就没有问题,因为Gson默认使用反射field来为变量赋值。 因此使用Gson时要在混淆配置中保留
fields
,使用fastjson时则要保留
set*
方法。

我遇到的问题还略坑,使用老版本fastjson且不使用注解在未开启混淆的情况下boolean isXXX属性是能够正确解析的,开启混淆后就不行了。此时直接加注解是可以的,更新到新版本后不加注解也可以,想想也是心累,fastjson的文档和更新日志都没找到相关的说明。所以,在无法避免这种不规范命名时,请一定要 使用注解 指定一下。

写了个简单的Test Case放到了github,ParseTest

测试在开启混淆并配置混淆规则的情况下,fastjson的不同版本解析json的结果。以及使用Gson解析的情况。分别位于不同分支。

关于此问题fastjson的issue中还有一个大家争论的问题:是要求我们严格遵守规范还是fastjson提供兼容?

答案你已经知道了。 链接 https://github.com/alibaba/fastjson/issues/278

转载网址:http://www.cnblogs.com/xulingfeng/p/6143317.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java
相关文章推荐