Android前后端交互细节--Json转化为对象的原理
移动互联网用户基数越来越大,除了一些工具类(指南针、手电筒等)的应用,绝大部分APP都需要与后端进行交互。

交互的数据格式有JSON、XML等,由于JSON具有语法简单、占用空间小等优势,基本所有的公司都以它来进行数据交互。
在交互中间,就会遇到JSON 数据和JavaBean 对象之间的相互转换问题,比如{"age":11,"name":"David","gender":"woman"} 这个JSON 串往往需要转换成Person 对象。
在项目中,我们基本不会自己写这部分代码,因为有一些类似于Gson、Jackson 的框架已经做了这部分工作,它们可以很简单的实现JSON 串与JavaBean 对象之间的相互转换。但是了解其实现的原理及涉及到的一些概念,如反射,对我们了解其他框架甚至自己写框架都是有帮助的。
下面,主要介绍下JSON 数据如何转换为JavaBean 对象及相关的一些概念。主要用到了反射、泛型两个技术点,了解了这两个概念,很容易能搞懂这个原理,并且能初探一些框架的实现原理。
1什么是反射?
Java 的反射机制是在程序运行期间而不是在编译期间,可以获取某个类的所有方法和属性,可以通过反射的方式进行对象的实例化,能够调用对象的每一个方法,可以通过调用方法或者直接对属性进行赋值。
它使得Java 这种编译性语言有了某些动态语言的特性,极大的增强了程序设计的灵活性,但也会带来点性能的问题(其实也不是个大问题,相对带来的方便,根本不用考虑)。它是构建框架的基础所在,最著名的SSH 集成框架底层实现用到了很多反射机制,可以很灵活的把一些信息放在配置文件中,减少了很大的代码量。
如Spring 的核心机制:依赖注入,就利用了反射来实例化类中的一些属性,达到了控制反转的目的;Struts 利用反射,根据表单中的数据对Action 中的对象进行实例化和对属性进行赋值,具体的应该是调用set 方法;Mybatis、Hibernate 也利用反射把数据库查询结果集实例化成JavaBean 对象。
反射相关的类都在java.lang.reflect 包中。

(java.lang.reflect包中所有类)
2什么是泛型
泛型是JDK1.5开始提供的,它实现了“参数化类型”的概念,可以提高程序的可读性和稳定性,并且所有的强制转换都是自动和隐式的,提高了代码的重用率。相对比较安全,比如可以在运行期避免发生java.lang.ClassCastException异常。

上图中红框圈主的地方就用到了泛型,而且是用在了集合类中,当然还可以使用在方法和接口中,分别称为泛型类、泛型方法及泛型接口,这里就不一一说明了。
3如何转换?
实现方法参考以下代码即可,注释的比较详细,还是比较简单的。

代码中集合对象的解析相对复杂一些,参考以下代码,其实就是用了个迭代。
小结
以上代码中的数据类型不够完全,比如还会遇到属性是复杂对象、Date、Enum、Map 之类的,也可以通过其它的办法来进行转化,比如根据对象的属性进行一一赋值。
可以从https://github.com/StarKeyMan/JsonToObject.git下载代码进行完善。
Android前后端交互细节--Json转化为对象的原理的更多相关文章
- 前后端交互实现(nginx,json,以及datatable的问题相关)
1.同源问题解决 首先,在同一个域下搭建网络域名访问,需要nginx软件,下载之后修改部分配置 然后再终端下cmd nginx.exe命令,或者打开nginx.exe文件,会运行nginx一闪而过, ...
- ajax学习----json,前后端交互,ajax
json <script> var obj = {"name": "xiaopo","age": 18,"gender ...
- Django之META与前后端交互
Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请 ...
- content-type常见类型辨析(以ajax与springmvc前后端交互为例)
博客搬家: content-type常见类型辨析(以ajax与springmvc前后端交互为例) 在http报文的首部中,有一个字段Content-type,表示请求体(entity body)中的数 ...
- Node之简单的前后端交互
node是前端必学的一门技能,我们都知道node是用的js做后端,在学习node之前我们有必要明白node是如何实现前后端交互的. 这里写了一个简单的通过原生ajax与node实现的一个交互,刚刚学n ...
- 百度ueditor的图片上传,前后端交互使用
百度ueditor的使用 一个文本编辑器,看了网上很多文档写的很乱,这里拾人牙慧,整理下怎么使用. 这个东西如果不涉及到图片附件上传,其实很简单,就是几个前端文件,直接引用,然后配置下ueditor. ...
- 【开源.NET】 轻量级内容管理框架Grissom.CMS(第二篇前后端交互数据结构分析)
这是 CMS 框架系列文章的第二篇,第一篇开源了该框架的代码和简要介绍了框架的目的.作用和思想,这篇主要解析如何把sql 转成标准 xml 配置文件和把前端post的增删改数据规范成方便后台解析的结构 ...
- thinkphp+jquery+ajax前后端交互注册验证
thinkphp+jquery+ajax前后端交互注册验证,界面如下 register.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...
- nodejs实现前后端交互
本人nodejs入门级选手,站在巨人(文殊)的肩膀上学习了一些相关知识,有幸在项目中使用nodejs实现了前后端交互,因此,将整个交互过程记录下来,方便以后学习. 本文从宏观讲述nodejs实现前后端 ...
随机推荐
- WebApi 参数请求
收藏来源于:http://www.cnblogs.com/babycool/p/3922738.html 路由配置到id post多个参数 ➕前缀 FromBody 参数为实体 对于一般前台页面发起的 ...
- 联想 U410 超极本启用加速硬盘方法
安装步骤: 方法一: 使用raid1方法 (此方法未安装过) 方法二: 普通安装后,使用RST加速 1.改BIOS , 为AHCI启动 , 2.安装好系统后,下载RST软件并安装 3.改BIO ...
- jQuery和JavaScript的点击事件区别
// $("#indexPage").click(); // 触发了a标签的点击事件,但是没有触发页面跳转 document.getElementById("indexP ...
- Java的线程机制
一.Java中实现多线程的两种方式1) 继承Thread类 Thread类包括了包括和创建线程所需的一切东西. Thread 最重要的方法是 run().编写线程程序时须要覆盖 run() 方法,ru ...
- android定时操作
Timer: 代码: Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { ...
- Unity3D:粒子系统Particle System
1. GameObject → Create Other → Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: ...
- java 链接server上的 mongodb 出现 connect time out 问题
异常信息 十二月 22, 2014 5:27:58 下午 com.mongodb.DBTCPConnector initDirectConnection 警告: Exception executing ...
- amaze ui和bootstrap有哪些差别?
amaze ui和bootstrap有哪些差别? 问题 我最近在学amaze ui,感觉如果单从功能性来看和bootstrap最大差别也就是扁平化,不过妹子ui号称对国产本土化支持更好,这个具体表现在 ...
- js -- canvas img 封装
鼠标 1.操作canvas 中的 img. 右键放大缩小,左键移动img. 2.拖动input type= range 改变图片的透明度 html 代码 <!DOCTYPE html> ...
- Spark MLlib聚类KMeans
算法说明 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异.聚类算 ...