Javebean声明boolean类型isXXX解析异常
2017-07-17 16:04
274 查看
JavaBean规范中规定
当编写代码出现不规范命名,将
此时如果使用老版本fastjson进行反序列化时就有可能出现问题,因为fastjson默认使用
解决方案简单粗暴,更新版本fastjson-android>=1.1.49或者使用JSONField注解指定name。 然而使用Gson就没有问题,因为Gson默认使用反射field来为变量赋值。 因此使用Gson时要在混淆配置中保留
我遇到的问题还略坑,使用老版本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
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
相关文章推荐
- JSONObject解析Boolean类型出现异常
- JSP解析JSONObject类型对象出现null object异常解决方案
- java异常例子解析及常见的异常类型
- 6.5(fact方法和主方法都声明异常) 求n!,阶乘值是byte类型
- 详解iOS开发中解析JSON中的boolean类型的数据遇到的问题
- C++异常处理 - 栈解旋,异常接口声明,异常类型和异常变量的生命周期
- 专家答疑:解析JAVA中常见异常类型与原因
- Scala类型声明与定义、函数定义、流程控制、异常处理
- C++异常处理 - 栈解旋,异常接口声明,异常类型和异常变量的生命周期
- SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
- j2ee的spring应用中注入boolean类型的数据会报异常
- 使用Boolean类型同步锁引起异常的分析
- GSON解析传入泛型T,出现类型转换异常
- SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
- 使用Boolean类型同步锁引起异常的分析
- Struts2 result类型,global-result,动态result,声明异常
- vs2005 写的web servcies 在.net 2003下调用时报xml 604异常原因是因为实体类,声明类型两个环境不一样
- iOS开发中解析JSON中的boolean类型的数据遇到的问题
- 系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常
- 系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常