移动互联网用户基数越来越大,除了一些工具类(指南针、手电筒等)的应用,绝大部分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转化为对象的原理的更多相关文章

  1. 前后端交互实现(nginx,json,以及datatable的问题相关)

    1.同源问题解决 首先,在同一个域下搭建网络域名访问,需要nginx软件,下载之后修改部分配置 然后再终端下cmd  nginx.exe命令,或者打开nginx.exe文件,会运行nginx一闪而过, ...

  2. ajax学习----json,前后端交互,ajax

    json <script> var obj = {"name": "xiaopo","age": 18,"gender ...

  3. Django之META与前后端交互

    Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请 ...

  4. content-type常见类型辨析(以ajax与springmvc前后端交互为例)

    博客搬家: content-type常见类型辨析(以ajax与springmvc前后端交互为例) 在http报文的首部中,有一个字段Content-type,表示请求体(entity body)中的数 ...

  5. Node之简单的前后端交互

    node是前端必学的一门技能,我们都知道node是用的js做后端,在学习node之前我们有必要明白node是如何实现前后端交互的. 这里写了一个简单的通过原生ajax与node实现的一个交互,刚刚学n ...

  6. 百度ueditor的图片上传,前后端交互使用

    百度ueditor的使用 一个文本编辑器,看了网上很多文档写的很乱,这里拾人牙慧,整理下怎么使用. 这个东西如果不涉及到图片附件上传,其实很简单,就是几个前端文件,直接引用,然后配置下ueditor. ...

  7. 【开源.NET】 轻量级内容管理框架Grissom.CMS(第二篇前后端交互数据结构分析)

    这是 CMS 框架系列文章的第二篇,第一篇开源了该框架的代码和简要介绍了框架的目的.作用和思想,这篇主要解析如何把sql 转成标准 xml 配置文件和把前端post的增删改数据规范成方便后台解析的结构 ...

  8. thinkphp+jquery+ajax前后端交互注册验证

    thinkphp+jquery+ajax前后端交互注册验证,界面如下 register.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. ...

  9. nodejs实现前后端交互

    本人nodejs入门级选手,站在巨人(文殊)的肩膀上学习了一些相关知识,有幸在项目中使用nodejs实现了前后端交互,因此,将整个交互过程记录下来,方便以后学习. 本文从宏观讲述nodejs实现前后端 ...

随机推荐

  1. WebApi 参数请求

    收藏来源于:http://www.cnblogs.com/babycool/p/3922738.html 路由配置到id post多个参数 ➕前缀 FromBody 参数为实体 对于一般前台页面发起的 ...

  2. 联想 U410 超极本启用加速硬盘方法

    安装步骤: 方法一: 使用raid1方法 (此方法未安装过) 方法二:  普通安装后,使用RST加速 1.改BIOS , 为AHCI启动    , 2.安装好系统后,下载RST软件并安装 3.改BIO ...

  3. jQuery和JavaScript的点击事件区别

    // $("#indexPage").click(); // 触发了a标签的点击事件,但是没有触发页面跳转 document.getElementById("indexP ...

  4. Java的线程机制

    一.Java中实现多线程的两种方式1) 继承Thread类 Thread类包括了包括和创建线程所需的一切东西. Thread 最重要的方法是 run().编写线程程序时须要覆盖 run() 方法,ru ...

  5. android定时操作

    Timer: 代码: Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { ...

  6. Unity3D:粒子系统Particle System

    1. GameObject → Create Other  →  Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: ...

  7. java 链接server上的 mongodb 出现 connect time out 问题

    异常信息 十二月 22, 2014 5:27:58 下午 com.mongodb.DBTCPConnector initDirectConnection 警告: Exception executing ...

  8. amaze ui和bootstrap有哪些差别?

    amaze ui和bootstrap有哪些差别? 问题 我最近在学amaze ui,感觉如果单从功能性来看和bootstrap最大差别也就是扁平化,不过妹子ui号称对国产本土化支持更好,这个具体表现在 ...

  9. js -- canvas img 封装

    鼠标   1.操作canvas 中的 img. 右键放大缩小,左键移动img. 2.拖动input type= range  改变图片的透明度 html 代码 <!DOCTYPE html> ...

  10. Spark MLlib聚类KMeans

    算法说明 聚类(Cluster analysis)有时也被翻译为簇类,其核心任务是:将一组目标object划分为若干个簇,每个簇之间的object尽可能相似,簇与簇之间的object尽可能相异.聚类算 ...