JavaBean的boolean isXXX反序列化问题
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
JavaBean的boolean isXXX反序列化问题的更多相关文章
- 关于javaBean中boolean类型变量的set和get注入后传到前端JS中的问题
set和get方法如下: public boolean isLine() { return isLine; } public void setLine(boolean isLine ...
- java序列化/反序列化之xstream、protobuf、protostuff 的比较与使用例子
目录 背景 测试 环境 工具 说明 结果 结论 xstream简单教程 准备 代码 protobuf简单教程 快速入门 下载.exe编译器 编写.proto文件 利用编译器编译.proto文件生成ja ...
- 几种封装javaBean的方法
开发框架时,经常需要使用java对象(javaBean)的属性来封装程序的数据,封装javaBean的方法有很多,比如反射,内省,以及使用工具类.下面从反射开始介绍. 1.javaBean介绍: 简介 ...
- JSON —— 序列化与反序列化
1.JSON 反序列化 JSON 序列化:将服务器端的 JavaBean 对象转换成 JSON 字符串 JSON 反序列化:服务器端得到一个 JSON 字符串,然后将 JSON 字符串转换 JavaB ...
- Android系列---JSON数据解析
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- JSON数据解析(转)
上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,而对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式,那么本篇随笔将讲解一下json这个知识点,包括如何通过 ...
- Android JSON数据解析(数据传输)
上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,而对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三 种格式,那么本篇随笔将讲解一下json这个知识点,包括如何通 ...
- Protostuff序列化分析
前言最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文 ...
- Android关于JSON数据解析
一.什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以 ...
随机推荐
- Java循环性能随笔
for iterator做迭代循环性能最好 然后是foreach 然后是提前声明好变量的for循环 最后是每次都要计算集合size的for package test; import j ...
- 通用数据挖掘[ZZ]
一.什么是数据挖掘?许多人认为数据挖掘更像是一门哲学,或数学的组成部分,而不是业务需求的实际解决方案.您可以从采用的各种定义中看出这一点,例如:“数据挖掘是对非常大型的数据进行的研究和分析,采用自动或 ...
- cocos2dx ease 公式
所有ease计算公式都在CCTweenFunction.cpp里.
- c++ undefined reference to mysqlinit
Solved g++ $(mysql_config --cflags) file.cpp -o filename $(mysql_config --libs)
- 高德地图关键字搜索删除上一次搜索的Marker
方法:Marker类的 setMap(null);方法 高德是通过循环调用addmarker(i,d)方法 创建marker标记,所以我们需要 把创建的marker标记压入到一个数组,再第二次搜索 ...
- php判断手机移动设备访问
<?php function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROF ...
- YII 小部件实现Area textArea
<?php echo $form->textArea($user_model,'introduce',array('cols'=>50,'rows'=>5)); ?>
- JS 获取各个宽度和高度
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.d ...
- 转:PHP 5.4中的traits
原文来自于:http://www.cnblogs.com/thinksasa/archive/2013/05/16/3081247.html PHP 5.4中的traits,是新引入的特性,中文还真不 ...
- BZOJ 1507 Editor
Description Input 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中可能会插入一些回车符,请忽略掉它 ...